From ea458518210d2356e396adf20117972ee1b766e5 Mon Sep 17 00:00:00 2001 From: Paul Leathers Date: Wed, 11 May 2016 14:37:16 -0700 Subject: [PATCH] Redefer function bodies that are not currently being executed and are eligible for deferred parsing (e.g., not arrow functions, not functions-in-block). This is experimental behavior, off by default. Define an 'on' mode in which all eligible functions are redeferred on GC, as well as a 'stress' mode in which all candidates are redeferred on each stack probe. This change is built on a previous PR that refactors the FunctionBody hierarchy to make it easier to toggle between deferred and fully-compiled states. --- lib/Backend/BailOut.cpp | 10 +- lib/Backend/BailOut.h | 2 +- lib/Backend/FunctionJITTimeInfo.cpp | 2 +- lib/Backend/Inline.cpp | 49 +- lib/Backend/Inline.h | 2 +- lib/Backend/InliningDecider.cpp | 4 +- lib/Backend/InterpreterThunkEmitter.cpp | 81 +-- lib/Backend/InterpreterThunkEmitter.h | 3 +- lib/Backend/JITTimeFunctionBody.cpp | 6 +- lib/Backend/JITTimeFunctionBody.h | 2 +- lib/Backend/Lower.cpp | 117 ++-- lib/Backend/Lower.h | 9 +- lib/Backend/LowerMDShared.cpp | 83 +-- lib/Backend/LowerMDShared.h | 2 - lib/Backend/NativeCodeGenerator.cpp | 6 +- lib/Backend/Opnd.cpp | 11 +- lib/Backend/Opnd.h | 1 + lib/Backend/arm/LowerMD.cpp | 129 ----- lib/Backend/arm/LowerMD.h | 4 - lib/Backend/arm64/LowerMD.h | 4 - lib/Common/ConfigFlagsList.h | 1 + lib/Common/Memory/CustomHeap.cpp | 4 + lib/Parser/Parse.cpp | 15 +- lib/Parser/Parse.h | 4 +- lib/Parser/ptree.h | 5 + lib/Runtime/Base/FunctionBody.cpp | 535 ++++++++++++------ lib/Runtime/Base/FunctionBody.h | 484 ++++++++++++---- lib/Runtime/Base/FunctionInfo.cpp | 5 +- lib/Runtime/Base/FunctionInfo.h | 37 +- lib/Runtime/Base/ScriptContext.cpp | 102 +++- lib/Runtime/Base/ScriptContext.h | 7 +- lib/Runtime/Base/ThreadContext.cpp | 225 +++++++- lib/Runtime/Base/ThreadContext.h | 26 + lib/Runtime/ByteCode/ByteCodeDumper.cpp | 6 +- lib/Runtime/ByteCode/ByteCodeEmitter.cpp | 11 +- lib/Runtime/ByteCode/ByteCodeGenerator.cpp | 106 ++-- lib/Runtime/ByteCode/ByteCodeGenerator.h | 4 +- lib/Runtime/ByteCode/ByteCodeSerializer.cpp | 9 +- lib/Runtime/ByteCode/FuncInfo.h | 2 +- lib/Runtime/ByteCode/ScopeInfo.cpp | 22 +- lib/Runtime/ByteCode/ScopeInfo.h | 17 +- lib/Runtime/Debug/TTEvents.cpp | 4 +- lib/Runtime/Debug/TTRuntmeInfoTracker.cpp | 2 +- lib/Runtime/Debug/TTSnapValues.cpp | 4 +- lib/Runtime/Language/AsmJsModule.cpp | 2 +- lib/Runtime/Language/DynamicProfileInfo.cpp | 8 +- .../Language/FunctionCodeGenJitTimeData.cpp | 3 +- .../Language/FunctionCodeGenJitTimeData.h | 2 +- .../Language/FunctionCodeGenRuntimeData.cpp | 3 +- lib/Runtime/Language/InlineCache.h | 2 +- .../Language/InterpreterStackFrame.cpp | 22 +- lib/Runtime/Language/JavascriptOperators.cpp | 14 +- .../Language/i386/AsmJsJitTemplate.cpp | 6 +- lib/Runtime/Library/GlobalObject.cpp | 3 +- .../Library/InJavascript/Intl.js.bc.32b.h | 356 ++++++------ .../Library/InJavascript/Intl.js.bc.64b.h | 350 ++++++------ .../IntlEngineInterfaceExtensionObject.cpp | 2 +- lib/Runtime/Library/JavascriptFunction.cpp | 32 +- lib/Runtime/Library/JavascriptFunction.h | 2 +- .../Library/JavascriptGeneratorFunction.cpp | 4 +- .../Library/JavascriptGeneratorFunction.h | 2 +- lib/Runtime/Library/JavascriptProxy.cpp | 2 +- lib/Runtime/Library/ScriptFunction.cpp | 41 +- lib/Runtime/Library/ScriptFunction.h | 2 +- lib/Runtime/Library/StackScriptFunction.cpp | 25 +- lib/Runtime/Library/StackScriptFunction.h | 2 +- lib/Runtime/Runtime.h | 1 + lib/Runtime/SerializableFunctionFields.h | 2 +- lib/Runtime/Types/ScriptFunctionType.cpp | 2 +- .../returnedvaluetests4.js.dbg.baseline | 119 ++-- ...nterpreted_function_attach.js.dbg.baseline | 385 +++---------- 71 files changed, 2029 insertions(+), 1529 deletions(-) diff --git a/lib/Backend/BailOut.cpp b/lib/Backend/BailOut.cpp index c4186352d46..89024dde045 100644 --- a/lib/Backend/BailOut.cpp +++ b/lib/Backend/BailOut.cpp @@ -1763,7 +1763,7 @@ void BailOutRecord::ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::S bailOutRecordNotConst->bailOutCount++; Js::FunctionEntryPointInfo *entryPointInfo = function->GetFunctionEntryPointInfo(); - uint8 callsCount = entryPointInfo->callsCount; + uint32 callsCount = entryPointInfo->callsCount; RejitReason rejitReason = RejitReason::None; bool reThunk = false; @@ -2320,11 +2320,7 @@ void BailOutRecord::ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::S entryPointInfo->totalJittedLoopIterations += entryPointInfo->jittedLoopIterationsSinceLastBailout; entryPointInfo->jittedLoopIterationsSinceLastBailout = 0; - if (entryPointInfo->totalJittedLoopIterations > UINT8_MAX) - { - entryPointInfo->totalJittedLoopIterations = UINT8_MAX; - } - uint8 totalJittedLoopIterations = (uint8)entryPointInfo->totalJittedLoopIterations; + uint32 totalJittedLoopIterations = (uint8)entryPointInfo->totalJittedLoopIterations; totalJittedLoopIterations = totalJittedLoopIterations <= Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout() ? 0 : totalJittedLoopIterations - Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout(); CheckPreemptiveRejit(executeFunction, bailOutKind, bailOutRecordNotConst, totalJittedLoopIterations, interpreterFrame->GetCurrentLoopNum()); @@ -2608,7 +2604,7 @@ void BailOutRecord::ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::S } } -void BailOutRecord::CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint8& callsOrIterationsCount, int loopNumber) +void BailOutRecord::CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint32& callsOrIterationsCount, int loopNumber) { if (bailOutKind == IR::BailOutOnNoProfile && executeFunction->IncrementBailOnMisingProfileCount() > CONFIG_FLAG(BailOnNoProfileLimit)) { diff --git a/lib/Backend/BailOut.h b/lib/Backend/BailOut.h index 42310f73cb8..24662dbf1b2 100644 --- a/lib/Backend/BailOut.h +++ b/lib/Backend/BailOut.h @@ -255,7 +255,7 @@ class BailOutRecord static void ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::ScriptFunction * innerMostInlinee, BailOutRecord const * bailOutRecord, IR::BailOutKind bailOutKind, Js::ImplicitCallFlags savedImplicitCallFlags, void * returnAddress); static void ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::ScriptFunction * innerMostInlinee, BailOutRecord const * bailOutRecord, IR::BailOutKind bailOutKind); - static void CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint8& callsOrIterationsCount, int loopNumber); + static void CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint32& callsOrIterationsCount, int loopNumber); void RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStackLayout * layout, Js::InterpreterStackFrame * newInstance, Js::ScriptContext * scriptContext, bool fromLoopBody, Js::Var * registerSaves, BailOutReturnValue * returnValue, Js::Var* pArgumentsObject, Js::Var branchValue = nullptr, void* returnAddress = nullptr, bool useStartCall = true, void * argoutRestoreAddress = nullptr) const; void RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStackLayout * layout, uint count, __in_ecount_opt(count) int * offsets, int argOutSlotId, diff --git a/lib/Backend/FunctionJITTimeInfo.cpp b/lib/Backend/FunctionJITTimeInfo.cpp index 2e8795af584..6b67cae6462 100644 --- a/lib/Backend/FunctionJITTimeInfo.cpp +++ b/lib/Backend/FunctionJITTimeInfo.cpp @@ -37,7 +37,7 @@ FunctionJITTimeInfo::BuildJITTimeData( jitData->inlineesBv = (BVFixedIDL*)codeGenData->inlineesBv; - if (codeGenData->GetFunctionInfo()->HasBody()) + if (codeGenData->GetFunctionInfo()->HasBody() && codeGenData->GetFunctionInfo()->GetFunctionProxy()->IsFunctionBody()) { Assert(isInlinee == !!runtimeData); const Js::FunctionCodeGenRuntimeData * targetRuntimeData = nullptr; diff --git a/lib/Backend/Inline.cpp b/lib/Backend/Inline.cpp index 4c2ac9a1c76..d0e1f340916 100644 --- a/lib/Backend/Inline.cpp +++ b/lib/Backend/Inline.cpp @@ -524,7 +524,9 @@ uint Inline::FillInlineesDataArray( } intptr_t inlineeFunctionInfoAddr = inlineeJitTimeData->GetFunctionInfoAddr(); - if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData)) +#ifdef DBG + if (inlineeJitTimeData->HasBody() && !PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData)) +#endif { const FunctionJITTimeInfo* rightInlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeFunctionInfoAddr); @@ -571,28 +573,31 @@ void Inline::FillInlineesDataArrayUsingFixedMethods( JITTimeFunctionBody* inlineeFuncBody = nullptr; while (inlineeJitTimeData) { - inlineeFuncBody = inlineeJitTimeData->GetBody(); - if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData) && !PHASE_OFF(Js::PolymorphicInlineFixedMethodsPhase, inlineeJitTimeData)) + if (inlineeJitTimeData->HasBody()) { - const FunctionJITTimeInfo * jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); - if (jitTimeData) + inlineeFuncBody = inlineeJitTimeData->GetBody(); + if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData) && !PHASE_OFF(Js::PolymorphicInlineFixedMethodsPhase, inlineeJitTimeData)) { - for (uint16 i = 0; i < cachedFixedInlineeCount; i++) + const FunctionJITTimeInfo * jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); + if (jitTimeData) { - if (inlineeJitTimeData->GetFunctionInfoAddr() == fixedFieldInfoArray[i].GetFuncInfoAddr()) + for (uint16 i = 0; i < cachedFixedInlineeCount; i++) { - inlineesDataArray[i] = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); - break; + if (inlineeJitTimeData->GetFunctionInfoAddr() == fixedFieldInfoArray[i].GetFuncInfoAddr()) + { + inlineesDataArray[i] = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); + break; + } } } - } - else - { + else + { #if defined(DBG_DUMP) || defined(ENABLE_DEBUG_CONFIG_OPTIONS) - char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif - POLYMORPHIC_INLINE_TESTTRACE(_u("INLINING (Polymorphic): Missing jit time data skipped inlinee\tInlinee: %s (%s)\n"), - inlineeFuncBody->GetDisplayName(), inlineeJitTimeData->GetDebugNumberSet(debugStringBuffer)); + POLYMORPHIC_INLINE_TESTTRACE(_u("INLINING (Polymorphic): Missing jit time data skipped inlinee\tInlinee: %s (%s)\n"), + inlineeFuncBody->GetDisplayName(), inlineeJitTimeData->GetDebugNumberSet(debugStringBuffer)); + } } } inlineeJitTimeData = inlineeJitTimeData->GetNext(); @@ -1026,7 +1031,7 @@ Inline::InlinePolymorphicFunction(IR::Instr *callInstr, const FunctionJITTimeInf IR::RegOpnd* functionObject = callInstr->GetSrc1()->AsRegOpnd(); dispatchStartLabel->InsertBefore(IR::BranchInstr::New(Js::OpCode::BrAddr_A, inlineeStartLabel, IR::IndirOpnd::New(functionObject, Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, dispatchStartLabel->m_func), - IR::AddrOpnd::New(inlineesDataArray[i]->GetBody()->GetAddr(), IR::AddrOpndKindDynamicFunctionBody, dispatchStartLabel->m_func), dispatchStartLabel->m_func)); + IR::AddrOpnd::New(inlineesDataArray[i]->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionBody, dispatchStartLabel->m_func), dispatchStartLabel->m_func)); } CompletePolymorphicInlining(callInstr, returnValueOpnd, doneLabel, dispatchStartLabel, /*ldMethodFldInstr*/nullptr, IR::BailOutOnPolymorphicInlineFunction); @@ -4063,14 +4068,14 @@ Inline::InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr } void -Inline::InsertFunctionBodyCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo) +Inline::InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo) { // if (JavascriptFunction::FromVar(r1)->functionInfo != funcInfo) goto noInlineLabel // BrNeq_I4 noInlineLabel, r1->functionInfo, funcInfo - IR::IndirOpnd* funcBody = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, callInstr->m_func); - IR::AddrOpnd* inlinedFuncBody = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionBody, callInstr->m_func); - bailoutInstr->SetSrc1(funcBody); - bailoutInstr->SetSrc2(inlinedFuncBody); + IR::IndirOpnd* opndFuncInfo = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, callInstr->m_func); + IR::AddrOpnd* inlinedFuncInfo = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionInfo, callInstr->m_func); + bailoutInstr->SetSrc1(opndFuncInfo); + bailoutInstr->SetSrc2(inlinedFuncInfo); insertBeforeInstr->InsertBefore(bailoutInstr); } @@ -4108,7 +4113,7 @@ Inline::PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *f InsertFunctionTypeIdCheck(callInstr, insertBeforeInstr, bailOutIfNotJsFunction); // 3. Bailout if function body doesn't match funcInfo - InsertFunctionBodyCheck(callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo); + InsertFunctionInfoCheck(callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo); return primaryBailOutInstr; } diff --git a/lib/Backend/Inline.h b/lib/Backend/Inline.h index e76e9cf118d..0d43aeafa7f 100644 --- a/lib/Backend/Inline.h +++ b/lib/Backend/Inline.h @@ -126,7 +126,7 @@ class Inline void InsertObjectCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); void InsertFunctionTypeIdCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); void InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind); - void InsertFunctionBodyCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); + void InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); void InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); void TryResetObjTypeSpecFldInfoOn(IR::PropertySymOpnd* propertySymOpnd); diff --git a/lib/Backend/InliningDecider.cpp b/lib/Backend/InliningDecider.cpp index f56bb6a1f39..33468f03490 100644 --- a/lib/Backend/InliningDecider.cpp +++ b/lib/Backend/InliningDecider.cpp @@ -151,7 +151,7 @@ uint InliningDecider::InlinePolymorphicCallSite(Js::FunctionBody *const inliner, AssertMsg(inlineeCount >= 2, "There are at least two polymorphic call site"); break; } - if (Inline(inliner, functionBodyArray[inlineeCount], isConstructorCall, true /*isPolymorphicCall*/, 0, profiledCallSiteId, recursiveInlineDepth, false)) + if (Inline(inliner, functionBodyArray[inlineeCount]->GetFunctionInfo(), isConstructorCall, true /*isPolymorphicCall*/, 0, profiledCallSiteId, recursiveInlineDepth, false)) { canInlineArray[inlineeCount] = true; actualInlineeCount++; @@ -272,7 +272,7 @@ Js::FunctionInfo *InliningDecider::Inline(Js::FunctionBody *const inliner, Js::F #endif this->bytecodeInlinedCount += inlinee->GetByteCodeCount(); - return inlinee; + return inlinee->GetFunctionInfo(); } Js::OpCode builtInInlineCandidateOpCode; diff --git a/lib/Backend/InterpreterThunkEmitter.cpp b/lib/Backend/InterpreterThunkEmitter.cpp index edef77016ed..e969b50fbfc 100644 --- a/lib/Backend/InterpreterThunkEmitter.cpp +++ b/lib/Backend/InterpreterThunkEmitter.cpp @@ -7,14 +7,15 @@ #ifdef ENABLE_NATIVE_CODEGEN #ifdef _M_X64 #ifdef _WIN32 -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 23; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 27; -const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 37; -const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 51; -const BYTE InterpreterThunkEmitter::ErrorOffset = 60; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 77; - -const BYTE InterpreterThunkEmitter::PrologSize = 76; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 23; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 27; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 31; +const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 41; +const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 55; +const BYTE InterpreterThunkEmitter::ErrorOffset = 64; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 81; + +const BYTE InterpreterThunkEmitter::PrologSize = 80; const BYTE InterpreterThunkEmitter::StackAllocSize = 0x28; // @@ -29,8 +30,9 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x48, 0x89, 0x4C, 0x24, 0x08, // mov qword ptr [rsp+8],rcx 0x4C, 0x89, 0x44, 0x24, 0x18, // mov qword ptr [rsp+18h],r8 0x4C, 0x89, 0x4C, 0x24, 0x20, // mov qword ptr [rsp+20h],r9 - 0x48, 0x8B, 0x41, 0x00, // mov rax, qword ptr [rcx+FunctionBodyOffset] - 0x48, 0x8B, 0x50, 0x00, // mov rdx, qword ptr [rax+DynamicThunkAddressOffset] + 0x48, 0x8B, 0x41, 0x00, // mov rax, qword ptr [rcx+FunctionInfoOffset] + 0x48, 0x8B, 0x48, 0x00, // mov rcx, qword ptr [rax+FunctionProxyOffset] + 0x48, 0x8B, 0x51, 0x00, // mov rdx, qword ptr [rcx+DynamicThunkAddressOffset] // Range Check for Valid call target 0x48, 0x83, 0xE2, 0xF8, // and rdx, 0xFFFFFFFFFFFFFFF8h ;Force 8 byte alignment 0x48, 0x8b, 0xca, // mov rcx, rdx @@ -46,7 +48,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x48, 0x83, 0xEC, StackAllocSize, // sub rsp,28h 0x48, 0xB8, 0x00, 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, // mov rax, 0xFF, 0xE2, // jmp rdx - 0xCC // int 3 ;for alignment to size of 8 we are adding this + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC // int 3 ;for alignment to size of 8 we are adding this }; const BYTE InterpreterThunkEmitter::Epilog[] = { @@ -93,11 +95,12 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { #endif #elif defined(_M_ARM) const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 8; -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 18; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 22; -const BYTE InterpreterThunkEmitter::CallBlockStartAddressInstrOffset = 38; -const BYTE InterpreterThunkEmitter::CallThunkSizeInstrOffset = 50; -const BYTE InterpreterThunkEmitter::ErrorOffset = 60; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 18; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 22; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 26; +const BYTE InterpreterThunkEmitter::CallBlockStartAddressInstrOffset = 42; +const BYTE InterpreterThunkEmitter::CallThunkSizeInstrOffset = 54; +const BYTE InterpreterThunkEmitter::ErrorOffset = 64; const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x0F, 0xB4, // push {r0-r3} @@ -106,7 +109,8 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x00, 0x00, 0x00, 0x00, // movw r1,ThunkAddress 0x00, 0x00, 0x00, 0x00, // movt r1,ThunkAddress 0xD0, 0xF8, 0x00, 0x20, // ldr.w r2,[r0,#0x00] - 0xD2, 0xF8, 0x00, 0x30, // ldr.w r3,[r2,#0x00] + 0xD2, 0xF8, 0x00, 0x00, // ldr.w r0,[r2,#0x00] + 0xD0, 0xF8, 0x00, 0x30, // ldr.w r3,[r0,#0x00] 0x4F, 0xF6, 0xF9, 0x70, // mov r0,#0xFFF9 0xCF, 0xF6, 0xFF, 0x70, // movt r0,#0xFFFF 0x03, 0xEA, 0x00, 0x03, // and r3,r3,r0 @@ -122,9 +126,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { //$safe: 0x02, 0xA8, // add r0,sp,#8 - 0x18, 0x47, // bx r3 - 0xFE, 0xDE, // int 3 ;Required for alignment - 0xFE, 0xDE // int 3 ;Required for alignment + 0x18, 0x47 // bx r3 }; const BYTE InterpreterThunkEmitter::JmpOffset = 2; @@ -140,9 +142,10 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { 0x5D, 0xF8, 0x14, 0xFB // ldr pc,[sp],#0x14 }; #elif defined(_M_ARM64) -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 24; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 28; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 32; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 24; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 28; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 32; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 36; //TODO: saravind :Implement Range Check for ARM64 const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { @@ -153,7 +156,8 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0xE4, 0x17, 0x03, 0xA9, //stp x4, x5, [sp, #48] 0xE6, 0x1F, 0x04, 0xA9, //stp x6, x7, [sp, #64] 0x02, 0x00, 0x40, 0xF9, //ldr x2, [x0, #0x00] ;offset will be replaced with Offset of FunctionInfo - 0x43, 0x00, 0x40, 0xF9, //ldr x3, [x2, #0x00] ;offset will be replaced with offset of DynamicInterpreterThunk + 0x40, 0x00, 0x40, 0xF9, //ldr x0, [x2, #0x00] ;offset will be replaced with Offset of FunctionProxy + 0x03, 0x00, 0x40, 0xF9, //ldr x3, [x0, #0x00] ;offset will be replaced with offset of DynamicInterpreterThunk //Following 4 MOV Instrs are to move the 64-bit address of the InterpreterThunk address into register x1. 0x00, 0x00, 0x00, 0x00, //movz x1, #0x00 ;This is overwritten with the actual thunk address(16 - 0 bits) move 0x00, 0x00, 0x00, 0x00, //movk x1, #0x00, lsl #16 ;This is overwritten with the actual thunk address(32 - 16 bits) move @@ -175,18 +179,20 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { 0xc0, 0x03, 0x5f, 0xd6 // ret }; #else -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 8; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 11; -const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 18; -const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 23; -const BYTE InterpreterThunkEmitter::ErrorOffset = 30; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 41; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 8; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 11; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 14; +const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 21; +const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 26; +const BYTE InterpreterThunkEmitter::ErrorOffset = 33; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 44; const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x55, // push ebp ;Prolog - setup the stack frame 0x8B, 0xEC, // mov ebp,esp 0x8B, 0x45, 0x08, // mov eax, dword ptr [ebp+8] - 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionBodyOffset] + 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionInfoOffset] + 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionProxyOffset] 0x8B, 0x48, 0x00, // mov ecx, dword ptr [eax+DynamicThunkAddressOffset] // Range Check for Valid call target 0x83, 0xE1, 0xF8, // and ecx, 0FFFFFFF8h @@ -202,7 +208,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x50, // push eax 0xB8, 0x00, 0x00, 0x00, 0x00, // mov eax, 0xFF, 0xE1, // jmp ecx - 0xCC // int 3 for 8byte alignment + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC // int 3 for 8byte alignment }; const BYTE InterpreterThunkEmitter::Epilog[] = { @@ -512,7 +518,8 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( Emit(thunkBuffer, ThunkAddressOffset + sizeof(movW), movT); // Encode LDR - Load of function Body - thunkBuffer[FunctionBodyOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionInfoOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionProxyOffset] = Js::FunctionInfo::GetOffsetOfFunctionProxy(); // Encode LDR - Load of interpreter thunk number thunkBuffer[DynamicThunkAddressOffset] = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); @@ -611,6 +618,11 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( AssertMsg(offsetOfFunctionInfo < 0x8000, "Immediate offset for LDR must be less than 0x8000"); *(PULONG)&thunkBuffer[FunctionBodyOffset] |= (offsetOfFunctionInfo / 8) << 10; + ULONG offsetOfFunctionProxy = Js::FunctionInfo::GetOffsetOfFunctionProxy(); + AssertMsg(offsetOfFunctionProxy % 8 == 0, "Immediate offset for LDR must be 8 byte aligned"); + AssertMsg(offsetOfFunctionProxy < 0x8000, "Immediate offset for LDR must be less than 0x8000"); + *(PULONG)&thunkBuffer[FunctionProxyOffset] |= (offsetOfFunctionInfo / 8) << 10; + // Encode LDR - Load of interpreter thunk number ULONG offsetOfDynamicInterpreterThunk = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); AssertMsg(offsetOfDynamicInterpreterThunk % 8 == 0, "Immediate offset for LDR must be 8 byte aligned"); @@ -654,7 +666,8 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( _Analysis_assume_(thunkSize == HeaderSize); Emit(thunkBuffer, ThunkAddressOffset, (uintptr_t)interpreterThunk); thunkBuffer[DynamicThunkAddressOffset] = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); - thunkBuffer[FunctionBodyOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionInfoOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionProxyOffset] = Js::FunctionInfo::GetOffsetOfFunctionProxy(); Emit(thunkBuffer, CallBlockStartAddrOffset, (uintptr_t) thunkBufferStartAddress + HeaderSize); uint totalThunkSize = (uint)(epilogStart - (thunkBufferStartAddress + HeaderSize)); Emit(thunkBuffer, ThunkSizeOffset, totalThunkSize); diff --git a/lib/Backend/InterpreterThunkEmitter.h b/lib/Backend/InterpreterThunkEmitter.h index b80087cf0f9..516536b8149 100644 --- a/lib/Backend/InterpreterThunkEmitter.h +++ b/lib/Backend/InterpreterThunkEmitter.h @@ -69,7 +69,8 @@ class InterpreterThunkEmitter /* -------static constants ----------*/ // Interpreter thunk buffer includes function prolog, setting up of arguments, jumping to the appropriate calling point. static const BYTE ThunkAddressOffset; - static const BYTE FunctionBodyOffset; + static const BYTE FunctionInfoOffset; + static const BYTE FunctionProxyOffset; static const BYTE DynamicThunkAddressOffset; static const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset; static const BYTE InterpreterThunkEmitter::ThunkSizeOffset; diff --git a/lib/Backend/JITTimeFunctionBody.cpp b/lib/Backend/JITTimeFunctionBody.cpp index ec91506d74b..6871162a82d 100644 --- a/lib/Backend/JITTimeFunctionBody.cpp +++ b/lib/Backend/JITTimeFunctionBody.cpp @@ -942,12 +942,12 @@ JITTimeFunctionBody::GetRootObject() const return m_bodyData.constTable[Js::FunctionBody::RootObjectRegSlot - Js::FunctionBody::FirstRegSlot]; } -intptr_t +Js::FunctionInfoPtrPtr JITTimeFunctionBody::GetNestedFuncRef(uint index) const { Assert(index < GetNestedCount()); - intptr_t baseAddr = m_bodyData.nestedFuncArrayAddr; - return baseAddr + (index * sizeof(void*)); + Js::FunctionInfoPtrPtr baseAddr = (Js::FunctionInfoPtrPtr)m_bodyData.nestedFuncArrayAddr; + return baseAddr + index; } intptr_t diff --git a/lib/Backend/JITTimeFunctionBody.h b/lib/Backend/JITTimeFunctionBody.h index b0c8e296460..f4e63c4409b 100644 --- a/lib/Backend/JITTimeFunctionBody.h +++ b/lib/Backend/JITTimeFunctionBody.h @@ -103,7 +103,7 @@ class JITTimeFunctionBody uint GetFullStatementMapCount() const; void * ReadFromAuxData(uint offset) const; void * ReadFromAuxContextData(uint offset) const; - intptr_t GetNestedFuncRef(uint index) const; + Js::FunctionInfoPtrPtr GetNestedFuncRef(uint index) const; intptr_t GetConstantVar(Js::RegSlot location) const; JITRecyclableObject * GetConstantContent(Js::RegSlot location) const; diff --git a/lib/Backend/Lower.cpp b/lib/Backend/Lower.cpp index 09debe82bfd..964c86fbe97 100644 --- a/lib/Backend/Lower.cpp +++ b/lib/Backend/Lower.cpp @@ -5676,11 +5676,10 @@ Lowerer::LoadFunctionBodyAsArgument(IR::Instr *instr, IR::IntConstOpnd * functio // At which point the deferred function proxy may be collect. // Just pass it the address where we will find the function proxy/body - intptr_t proxyRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue()); - AssertMsg(proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); - //AssertMsg(*proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); + Js::FunctionInfoPtrPtr infoRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue()); + AssertMsg(infoRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); - IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)proxyRef, IR::AddrOpndKindDynamicMisc, m_func); + IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)infoRef, IR::AddrOpndKindDynamicMisc, m_func); instrPrev = m_lowererMD.LoadHelperArgument(instr, indexOpnd); m_lowererMD.LoadHelperArgument(instr, envOpnd); @@ -6365,7 +6364,7 @@ Lowerer::LowerIsInst(IR::Instr * isInstInstr, IR::JnHelperMethod helperMethod) } void -Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy) +Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo) { Func * func = this->m_func; Assert(func->HasAnyStackNestedFunc()); @@ -6379,7 +6378,7 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro // Currently we don't initialize the environment until we actually allocate the function, we also // walk the list of stack function when we need to box them. so we should use initialize it to NullFrameDisplay - GenerateStackScriptFunctionInit(addressOpnd, nestedProxy, + GenerateStackScriptFunctionInit(addressOpnd, nestedInfo, IR::AddrOpnd::New(func->GetThreadContextInfo()->GetNullFrameDisplayAddr(), IR::AddrOpndKindDynamicMisc, func), insertBeforeInstr); // Establish the next link @@ -6389,26 +6388,28 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro void Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd, - intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed) + Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed) { Func * func = this->m_func; IR::Opnd * functionProxyOpnd; + IR::Opnd * functionInfoOpnd = nullptr; IR::Opnd * typeOpnd = nullptr; bool doCheckTypeOpnd = true; - if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*(Js::FunctionProxy **)nestedProxy)->IsDeferred()) + if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*nestedInfo)->IsDeferred()) { + functionInfoOpnd = IR::RegOpnd::New(TyMachPtr, func); + InsertMove(functionInfoOpnd, IR::MemRefOpnd::New(nestedInfo, TyMachPtr, func), insertBeforeInstr); functionProxyOpnd = IR::RegOpnd::New(TyMachPtr, func); - InsertMove(functionProxyOpnd, IR::MemRefOpnd::New(nestedProxy, TyMachPtr, func), insertBeforeInstr); + InsertMove(functionProxyOpnd, IR::IndirOpnd::New(functionInfoOpnd->AsRegOpnd(), Js::FunctionInfo::GetOffsetOfFunctionProxy(), TyMachPtr, func), insertBeforeInstr); typeOpnd = IR::RegOpnd::New(TyMachPtr, func); InsertMove(typeOpnd, IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfDeferredPrototypeType(), TyMachPtr, func), insertBeforeInstr); } else { - Js::FunctionProxy * functionProxy = *(Js::FunctionProxy **)nestedProxy; - Js::FunctionBody * functionBody = functionProxy->GetFunctionBody(); + Js::FunctionBody * functionBody = (*nestedInfo)->GetFunctionBody(); functionProxyOpnd = CreateFunctionBodyOpnd(functionBody); - Js::ScriptFunctionType * type = functionProxy->GetDeferredPrototypeType(); + Js::ScriptFunctionType * type = functionBody->GetDeferredPrototypeType(); if (type != nullptr) { typeOpnd = IR::AddrOpnd::New(type, IR::AddrOpndKindDynamicType, func); @@ -6446,19 +6447,30 @@ Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddr GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfConstructorCache(), LoadLibraryValueOpnd(insertBeforeInstr, LibraryValue::ValueConstructorCacheDefaultInstance), insertBeforeInstr, isZeroed); - GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfFunctionInfo(), functionProxyOpnd, insertBeforeInstr, isZeroed); + if (!functionInfoOpnd) + { + if (functionProxyOpnd->IsRegOpnd()) + { + functionInfoOpnd = IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func); + } + else + { + functionInfoOpnd = IR::MemRefOpnd::New((BYTE*)functionProxyOpnd->AsAddrOpnd()->m_address + Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func); + } + } + GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfFunctionInfo(), functionInfoOpnd, insertBeforeInstr, isZeroed); GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfEnvironment(), envOpnd, insertBeforeInstr, isZeroed); GenerateMemInitNull(regOpnd, Js::ScriptFunction::GetOffsetOfCachedScopeObj(), insertBeforeInstr, isZeroed); GenerateMemInitNull(regOpnd, Js::ScriptFunction::GetOffsetOfHasInlineCaches(), insertBeforeInstr, isZeroed); } void -Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr) +Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr) { Func * func = this->m_func; GenerateScriptFunctionInit(regOpnd, LoadVTableValueOpnd(insertBeforeInstr, VTableValue::VtableStackScriptFunction), - nestedProxy, envOpnd, insertBeforeInstr); + nestedInfo, envOpnd, insertBeforeInstr); InsertMove(IR::IndirOpnd::New(regOpnd, Js::StackScriptFunction::GetOffsetOfBoxedScriptFunction(), TyMachPtr, func), IR::AddrOpnd::NewNull(func), insertBeforeInstr); } @@ -6511,7 +6523,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv IR::IntConstOpnd::New(Js::FunctionBody::Flags_StackNestedFunc, TyInt8, func, true), Js::OpCode::BrEq_A, labelNoStackFunc, newScFuncInstr); - intptr_t nestedProxy = func->GetJITFunctionBody()->GetNestedFuncRef(index); + Js::FunctionInfoPtrPtr nestedInfo = func->GetJITFunctionBody()->GetNestedFuncRef(index); IR::Instr * instrAssignDst; IR::RegOpnd * envOpnd = *ppEnvOpnd; if (!func->IsLoopBody()) @@ -6520,7 +6532,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv StackSym * stackSym = StackSym::New(TyMisc, func); // ScriptFunction and it's next pointer this->m_func->StackAllocate(stackSym, sizeof(Js::StackScriptFunction) + sizeof(Js::StackScriptFunction *)); - GenerateStackScriptFunctionInit(stackSym, nestedProxy); + GenerateStackScriptFunctionInit(stackSym, nestedInfo); InsertMove(IR::SymOpnd::New(stackSym, Js::ScriptFunction::GetOffsetOfEnvironment(), TyMachPtr, func), envOpnd, @@ -14550,22 +14562,65 @@ IR::Instr *Lowerer::InsertConvertFloat64ToFloat32( return instr; } -void Lowerer::InsertIncUInt8PreventOverflow( +void Lowerer::InsertDecUInt32PreventOverflow( IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef) { - LowererMD::InsertIncUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef); -} + Assert(dst); + Assert(dst->GetType() == TyUint32); + Assert(src); + Assert(src->GetType() == TyUint32); + Assert(insertBeforeInstr); -void Lowerer::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - LowererMD::InsertDecUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef); + Func *const func = insertBeforeInstr->m_func; + + // Generate: + // subs temp, src, 1 + // bcs $overflow + // mov dst, temp + // b $continue + // $overflow: + // mov dst, 0 + // $continue: + + IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); + + // subs temp, src, 1 + IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint32, func), TyUint32, func); + const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); + Lowerer::InsertSub(true, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint32, func, true), overflowLabel); + + // bcs $overflow + Lowerer::InsertBranch(Js::OpCode::BrLt_A, true, overflowLabel, overflowLabel); + + // mov dst, temp + Lowerer::InsertMove(dst, tempOpnd, overflowLabel); + + const bool dstEqualsSrc = dst->IsEqual(src); + if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) + { + // b $continue + // $overflow: + // mov dst, 0 + // $continue: + IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); + Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); + if(!dstEqualsSrc) + { + Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint32, func, true), continueLabel); + } + + if(onOverflowInsertBeforeInstrRef) + { + *onOverflowInsertBeforeInstrRef = continueLabel; + } + } + else + { + // $overflow: + } } void Lowerer::InsertFloatCheckForZeroOrNanBranch( @@ -21922,18 +21977,16 @@ void Lowerer::LowerFunctionBodyCallCountChange(IR::Instr *const insertBeforeInst IR::AddrOpnd::New((Js::Var)func->GetWorkItem()->GetCallsCountAddress(), IR::AddrOpndKindDynamicMisc, func, true), insertBeforeInstr); - IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint8, func); + IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint32, func); const IR::AutoReuseOpnd autoReuseCountOpnd(countOpnd, func); if(!isSimpleJit) { - // InsertIncUint8PreventOverflow [countAddress] - InsertIncUInt8PreventOverflow(countOpnd, countOpnd, insertBeforeInstr); + InsertAdd(false, countOpnd, countOpnd, IR::IntConstOpnd::New(1, TyUint32, func), insertBeforeInstr); return; } - // InsertDecUint8PreventOverflow [countAddress] IR::Instr *onOverflowInsertBeforeInstr; - InsertDecUInt8PreventOverflow( + InsertDecUInt32PreventOverflow( countOpnd, countOpnd, insertBeforeInstr, diff --git a/lib/Backend/Lower.h b/lib/Backend/Lower.h index 7d7df7dc4c6..89b2e396dd6 100644 --- a/lib/Backend/Lower.h +++ b/lib/Backend/Lower.h @@ -144,10 +144,10 @@ class Lowerer void EnsureZeroLastStackFunctionNext(); void AllocStackClosure(); IR::Instr * GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnvOpnd); - void GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy); + void GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo); void GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd, - intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false); - void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr); + Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false); + void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr); IR::Instr * LowerProfiledStFld(IR::JitProfilingInstr * instr, Js::PropertyOperationFlags flags); IR::Instr * LowerStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, IR::JnHelperMethod polymorphicHelperMethod, bool withInlineCache, IR::LabelInstr *ppBailOutLabel = nullptr, bool isHelper = false, bool withPutFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None); IR::Instr * LowerScopedStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, bool withInlineCache, @@ -327,8 +327,7 @@ class Lowerer static IR::Instr * InsertConvertFloat64ToFloat32(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr); public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); + static void InsertDecUInt32PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); void InsertFloatCheckForZeroOrNanBranch(IR::Opnd *const src, const bool branchOnZeroOrNan, IR::LabelInstr *const target, IR::LabelInstr *const fallthroughLabel, IR::Instr *const insertBeforeInstr); public: diff --git a/lib/Backend/LowerMDShared.cpp b/lib/Backend/LowerMDShared.cpp index 9464aaac27c..ea629a0eab5 100644 --- a/lib/Backend/LowerMDShared.cpp +++ b/lib/Backend/LowerMDShared.cpp @@ -1445,13 +1445,15 @@ LowererMD::Legalize(IR::Instr *const instr, bool fPostRegAlloc) if(instr->m_opcode == Js::OpCode::MOV) { uint src1Forms = L_Reg | L_Mem | L_Ptr; // Allow 64 bit values in x64 as well -#if _M_X64 if (dst->IsMemoryOpnd()) { +#if _M_X64 // Only allow <= 32 bit values src1Forms = L_Reg | L_Imm32; - } +#else + src1Forms = L_Reg | L_Ptr; #endif + } LegalizeOpnds( instr, L_Reg | L_Mem, @@ -4752,83 +4754,6 @@ LowererMD::GenerateStFldFromLocalInlineCache( instrStFld->InsertBefore(instr); } -void LowererMD::InsertIncUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // cmp src, static_cast(-1) - // jeq $done - // dst = add src, 1 - // $noOverflow: - - IR::LabelInstr *const noOverflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - Lowerer::InsertCompareBranch(src, IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), - Js::OpCode::BrEq_A, noOverflowLabel, noOverflowLabel); - - // inc dst, src - Lowerer::InsertAdd(true, dst, src, IR::IntConstOpnd::New(1, TyUint8, func, true), noOverflowLabel); - - // $done: - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = noOverflowLabel; - } -} - -void LowererMD::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // sub dst, src, 1 - // jnc $noOverflow - // mov dst, 0 - // $noOverflow: - - IR::LabelInstr *const noOverflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // sub dst, src, 1 - IR::Instr *const instr = IR::Instr::New(Js::OpCode::SUB, dst, src, IR::IntConstOpnd::New(1, TyUint8, func, true), func); - noOverflowLabel->InsertBefore(instr); - MakeDstEquSrc1(instr); - - // jnc $noOverflow - Lowerer::InsertBranch(Js::OpCode::BrGe_A, true, noOverflowLabel, noOverflowLabel); - - // mov dst, 0 - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint8, func, true), noOverflowLabel); - - // $noOverflow: - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = noOverflowLabel; - } -} - //---------------------------------------------------------------------------- // // LowererMD::GenerateFastScopedLdFld diff --git a/lib/Backend/LowerMDShared.h b/lib/Backend/LowerMDShared.h index 5318d99cb70..d596f777e10 100644 --- a/lib/Backend/LowerMDShared.h +++ b/lib/Backend/LowerMDShared.h @@ -312,8 +312,6 @@ class LowererMD } public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); #ifdef ENABLE_SIMDJS void Simd128InitOpcodeMap(); diff --git a/lib/Backend/NativeCodeGenerator.cpp b/lib/Backend/NativeCodeGenerator.cpp index 98811d4eefb..bdbc51bdebe 100644 --- a/lib/Backend/NativeCodeGenerator.cpp +++ b/lib/Backend/NativeCodeGenerator.cpp @@ -2677,7 +2677,7 @@ NativeCodeGenerator::GatherCodeGenData( if (!isJitTimeDataComputed) { - Js::FunctionCodeGenJitTimeData *inlineeJitTimeData = jitTimeData->AddInlinee(recycler, profiledCallSiteId, inlineeFunctionBodyArray[id], isInlined); + Js::FunctionCodeGenJitTimeData *inlineeJitTimeData = jitTimeData->AddInlinee(recycler, profiledCallSiteId, inlineeFunctionBodyArray[id]->GetFunctionInfo(), isInlined); if (isInlined) { GatherCodeGenData( @@ -2973,7 +2973,7 @@ NativeCodeGenerator::GatherCodeGenData(Js::FunctionBody *const topFunctionBody, const auto recycler = scriptContext->GetRecycler(); { - const auto jitTimeData = RecyclerNew(recycler, Js::FunctionCodeGenJitTimeData, functionBody, entryPoint); + const auto jitTimeData = RecyclerNew(recycler, Js::FunctionCodeGenJitTimeData, functionBody->GetFunctionInfo(), entryPoint); InliningDecider inliningDecider(functionBody, workItem->Type() == JsLoopBodyWorkItemType, functionBody->IsInDebugMode(), workItem->GetJitMode()); BEGIN_TEMP_ALLOCATOR(gatherCodeGenDataAllocator, scriptContext, _u("GatherCodeGenData")); @@ -3630,7 +3630,7 @@ bool NativeCodeGenerator::TryAggressiveInlining(Js::FunctionBody *const topFunct } else { - inlinee = inliningDecider.Inline(inlineeFunctionBody, inlinee, isConstructorCall, false, inliningDecider.GetConstantArgInfo(inlineeFunctionBody, profiledCallSiteId), profiledCallSiteId, inlineeFunctionBody == inlinee ? recursiveInlineDepth + 1 : 0, true); + inlinee = inliningDecider.Inline(inlineeFunctionBody, inlinee, isConstructorCall, false, inliningDecider.GetConstantArgInfo(inlineeFunctionBody, profiledCallSiteId), profiledCallSiteId, inlineeFunctionBody->GetFunctionInfo() == inlinee ? recursiveInlineDepth + 1 : 0, true); if (!inlinee) { return false; diff --git a/lib/Backend/Opnd.cpp b/lib/Backend/Opnd.cpp index 8240677c11f..6cd635c9820 100644 --- a/lib/Backend/Opnd.cpp +++ b/lib/Backend/Opnd.cpp @@ -3342,12 +3342,12 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si WriteToBuffer(&buffer, &n, _u(" (&RecyclerAllocatorFreeList)")); break; - case IR::AddrOpndKindDynamicFunctionBody: + case IR::AddrOpndKindDynamicFunctionInfo: DumpAddress(address, printToConsole, skipMaskedAddress); if (func->IsOOPJIT()) { // TODO: OOP JIT, dump more info - WriteToBuffer(&buffer, &n, _u(" (FunctionBody)")); + WriteToBuffer(&buffer, &n, _u(" (FunctionInfo)")); } else { @@ -3355,6 +3355,11 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si } break; + case IR::AddrOpndKindDynamicFunctionBody: + DumpAddress(address, printToConsole, skipMaskedAddress); + DumpFunctionInfo(&buffer, &n, ((Js::FunctionBody *)address)->GetFunctionInfo(), printToConsole); + break; + case IR::AddrOpndKindDynamicFunctionBodyWeakRef: DumpAddress(address, printToConsole, skipMaskedAddress); @@ -3365,7 +3370,7 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si } else { - DumpFunctionInfo(&buffer, &n, ((RecyclerWeakReference *)address)->FastGet(), printToConsole, _u("FunctionBodyWeakRef")); + DumpFunctionInfo(&buffer, &n, ((RecyclerWeakReference *)address)->FastGet()->GetFunctionInfo(), printToConsole, _u("FunctionBodyWeakRef")); } break; diff --git a/lib/Backend/Opnd.h b/lib/Backend/Opnd.h index e362febf75e..178ba59be8c 100644 --- a/lib/Backend/Opnd.h +++ b/lib/Backend/Opnd.h @@ -59,6 +59,7 @@ enum AddrOpndKind : BYTE { AddrOpndKindDynamicMisc, // no profiling in dynamic JIT AddrOpndKindDynamicFunctionBody, + AddrOpndKindDynamicFunctionInfo, // use LoadRuntimeInlineCacheOpnd for runtime caches, // in relocatable JIT polymorphic inline caches aren't generated and can // be referenced directly (for now) diff --git a/lib/Backend/arm/LowerMD.cpp b/lib/Backend/arm/LowerMD.cpp index 743998d33fa..31f00ed16c4 100644 --- a/lib/Backend/arm/LowerMD.cpp +++ b/lib/Backend/arm/LowerMD.cpp @@ -452,135 +452,6 @@ LowererMD::GenerateFunctionObjectTest(IR::Instr * callInstr, IR::RegOpnd *funct } } -void LowererMD::InsertIncUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // add temp, src, 1 - // tst temp, static_cast(-1) - // beq $overflow - // mov dst, temp - // b $continue - // $overflow: - // mov dst, static_cast(-1) - // $continue: - - IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // add temp, src, 1 - IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint8, func), TyUint8, func); - const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); - Lowerer::InsertAdd(false, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint8, func, true), overflowLabel); - - // tst temp, 0xff - // beq $overflow - Lowerer::InsertTestBranch( - tempOpnd, - IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), - Js::OpCode::BrEq_A, - overflowLabel, - overflowLabel); - - // mov dst, temp - Lowerer::InsertMove(dst, tempOpnd, overflowLabel); - - const bool dstEqualsSrc = dst->IsEqual(src); - if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) - { - // b $continue - // $overflow: - // mov dst, static_cast(-1) - // $continue: - IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); - if(!dstEqualsSrc) - { - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), continueLabel); - } - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = continueLabel; - } - } - else - { - // $overflow: - } -} - -void LowererMD::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // subs temp, src, 1 - // bcs $overflow - // mov dst, temp - // b $continue - // $overflow: - // mov dst, 0 - // $continue: - - IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // subs temp, src, 1 - IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint8, func), TyUint8, func); - const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); - Lowerer::InsertSub(true, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint8, func, true), overflowLabel); - - // bcs $overflow - Lowerer::InsertBranch(Js::OpCode::BrLt_A, true, overflowLabel, overflowLabel); - - // mov dst, temp - Lowerer::InsertMove(dst, tempOpnd, overflowLabel); - - const bool dstEqualsSrc = dst->IsEqual(src); - if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) - { - // b $continue - // $overflow: - // mov dst, 0 - // $continue: - IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); - if(!dstEqualsSrc) - { - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint8, func, true), continueLabel); - } - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = continueLabel; - } - } - else - { - // $overflow: - } -} - IR::Instr* LowererMD::GeneratePreCall(IR::Instr * callInstr, IR::Opnd *functionObjOpnd) { diff --git a/lib/Backend/arm/LowerMD.h b/lib/Backend/arm/LowerMD.h index 4be2cdab2bb..f68103fd96f 100644 --- a/lib/Backend/arm/LowerMD.h +++ b/lib/Backend/arm/LowerMD.h @@ -272,10 +272,6 @@ class LowererMD void LowerInlineSpreadArgOutLoop(IR::Instr *callInstr, IR::RegOpnd *indexOpnd, IR::RegOpnd *arrayElementsStartOpnd); -public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - private: void GenerateFlagInlineCacheCheckForGetterSetter( IR::Instr * insertBeforeInstr, diff --git a/lib/Backend/arm64/LowerMD.h b/lib/Backend/arm64/LowerMD.h index e254aac1d05..680ab8221e0 100644 --- a/lib/Backend/arm64/LowerMD.h +++ b/lib/Backend/arm64/LowerMD.h @@ -265,8 +265,4 @@ class LowererMD void ResetHelperArgsCount() { __debugbreak(); } void LowerInlineSpreadArgOutLoop(IR::Instr *callInstr, IR::RegOpnd *indexOpnd, IR::RegOpnd *arrayElementsStartOpnd) { __debugbreak(); } - -public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr) { __debugbreak(); } - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr) { __debugbreak(); } }; diff --git a/lib/Common/ConfigFlagsList.h b/lib/Common/ConfigFlagsList.h index 3540453db7d..cd7ee38f880 100644 --- a/lib/Common/ConfigFlagsList.h +++ b/lib/Common/ConfigFlagsList.h @@ -10,6 +10,7 @@ PHASE(All) PHASE(Parse) PHASE(RegexCompile) PHASE(DeferParse) + PHASE(Redeferral) PHASE(DeferEventHandlers) PHASE(FunctionSourceInfoParse) PHASE(StringTemplateParse) diff --git a/lib/Common/Memory/CustomHeap.cpp b/lib/Common/Memory/CustomHeap.cpp index 5cc09d8990e..533d45bcd6f 100644 --- a/lib/Common/Memory/CustomHeap.cpp +++ b/lib/Common/Memory/CustomHeap.cpp @@ -251,6 +251,10 @@ Allocation* Heap::Alloc(size_t bytes, ushort pdataCount, ushort xdataSize, bool { page = AllocNewPage(bucket, canAllocInPreReservedHeapPageSegment, isAnyJittedCode, isAllJITCodeInPreReservedRegion); } + else if (!canAllocInPreReservedHeapPageSegment && isAnyJittedCode) + { + *isAllJITCodeInPreReservedRegion = false; + } // Out of memory if (page == nullptr) diff --git a/lib/Parser/Parse.cpp b/lib/Parser/Parse.cpp index dc225bee23a..79c1d5aa1a7 100644 --- a/lib/Parser/Parse.cpp +++ b/lib/Parser/Parse.cpp @@ -4877,7 +4877,7 @@ bool Parser::ParseFncDeclHelper(ParseNodePtr pnodeFnc, LPCOLESTR pNameHint, usho BOOL isDeferredFnc = IsDeferredFnc(); AnalysisAssert(isDeferredFnc || pnodeFnc); isTopLevelDeferredFunc = - (!isDeferredFnc + (!fLambda && DeferredParse(pnodeFnc->sxFnc.functionId) && (!pnodeFnc->sxFnc.IsNested() || CONFIG_FLAG(DeferNested)) // Don't defer if this is a function expression not contained in a statement or other expression. @@ -4888,6 +4888,9 @@ bool Parser::ParseFncDeclHelper(ParseNodePtr pnodeFnc, LPCOLESTR pNameHint, usho && !fModule ); + pnodeFnc->sxFnc.SetCanBeDeferred(isTopLevelDeferredFunc && PnFnc::CanBeRedeferred(pnodeFnc->sxFnc.fncFlags)); + isTopLevelDeferredFunc = isTopLevelDeferredFunc && !isDeferredFnc; + if (!fLambda && !isDeferredFnc && !isLikelyIIFE && @@ -6360,6 +6363,11 @@ ParseNodePtr Parser::GenerateEmptyConstructor(bool extends) pnodeFnc->sxFnc.deferredStub = nullptr; pnodeFnc->sxFnc.funcInfo = nullptr; + // In order to (re-)defer the default constructor, we need to, for instance, track + // deferred class expression the way we track function expression, since we lose the part of the source + // that tells us which we have. + pnodeFnc->sxFnc.canBeDeferred = false; + #ifdef DBG pnodeFnc->sxFnc.deferredParseNextFunctionId = *(this->m_nextFunctionId); #endif @@ -10312,6 +10320,7 @@ void Parser::ParseStmtList(ParseNodePtr *ppnodeList, ParseNodePtr **pppnodeLast, // i.e. smEnvironment == SM_OnFunctionCode Assert(m_currentNodeFunc != nullptr); m_currentNodeFunc->sxFnc.SetAsmjsMode(); + m_currentNodeFunc->sxFnc.SetCanBeDeferred(false); m_InAsmMode = true; CHAKRATEL_LANGSTATS_INC_LANGFEATURECOUNT(AsmJSFunctionCount, m_scriptContext); @@ -10566,7 +10575,7 @@ void Parser::InitPids() wellKnownPropertyPids._star = m_phtbl->PidHashNameLen(_u("*"), sizeof("*") - 1); } -void Parser::RestoreScopeInfo(Js::FunctionBody* functionBody) +void Parser::RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody) { if (!functionBody) { @@ -10622,7 +10631,7 @@ void Parser::RestoreScopeInfo(Js::FunctionBody* functionBody) scopeInfo->GetScopeInfo(this, nullptr, nullptr, scope); } -void Parser::FinishScopeInfo(Js::FunctionBody *functionBody) +void Parser::FinishScopeInfo(Js::ParseableFunctionInfo *functionBody) { if (!functionBody) { diff --git a/lib/Parser/Parse.h b/lib/Parser/Parse.h index 142596ce13d..d2e854ac910 100644 --- a/lib/Parser/Parse.h +++ b/lib/Parser/Parse.h @@ -967,8 +967,8 @@ class Parser void RemovePrevPidRef(IdentPtr pid, PidRefStack *lastRef); void SetPidRefsInScopeDynamic(IdentPtr pid, int blockId); - void RestoreScopeInfo(Js::FunctionBody* functionBody); - void FinishScopeInfo(Js::FunctionBody* functionBody); + void RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody); + void FinishScopeInfo(Js::ParseableFunctionInfo* functionBody); BOOL PnodeLabelNoAST(IdentToken* pToken, LabelId* pLabelIdList); LabelId* CreateLabelId(IdentToken* pToken); diff --git a/lib/Parser/ptree.h b/lib/Parser/ptree.h index 723bc1f2e65..a4d39a45bfe 100644 --- a/lib/Parser/ptree.h +++ b/lib/Parser/ptree.h @@ -246,9 +246,12 @@ struct PnFnc #endif RestorePoint *pRestorePoint; DeferredFunctionStub *deferredStub; + bool canBeDeferred; static const int32 MaxStackClosureAST = 800000; + static bool CanBeRedeferred(unsigned int flags) { return !(flags & (kFunctionIsGenerator | kFunctionIsAsync)); } + private: void SetFlags(uint flags, bool set) { @@ -316,6 +319,7 @@ struct PnFnc void SetUsesArguments(bool set = true) { SetFlags(kFunctionUsesArguments, set); } void SetIsDefaultModuleExport(bool set = true) { SetFlags(kFunctionIsDefaultModuleExport, set); } void SetNestedFuncEscapes(bool set = true) { nestedFuncEscapes = set; } + void SetCanBeDeferred(bool set = true) { canBeDeferred = set; } bool CallsEval() const { return HasFlags(kFunctionCallsEval); } bool ChildCallsEval() const { return HasFlags(kFunctionChildCallsEval); } @@ -353,6 +357,7 @@ struct PnFnc bool UsesArguments() const { return HasFlags(kFunctionUsesArguments); } bool IsDefaultModuleExport() const { return HasFlags(kFunctionIsDefaultModuleExport); } bool NestedFuncEscapes() const { return nestedFuncEscapes; } + bool CanBeDeferred() const { return canBeDeferred; } size_t LengthInBytes() { diff --git a/lib/Runtime/Base/FunctionBody.cpp b/lib/Runtime/Base/FunctionBody.cpp index 51f14c235c2..de646f29d24 100644 --- a/lib/Runtime/Base/FunctionBody.cpp +++ b/lib/Runtime/Base/FunctionBody.cpp @@ -68,13 +68,11 @@ namespace Js #endif // FunctionProxy methods - FunctionProxy::FunctionProxy(JavascriptMethod entryPoint, Attributes attributes, LocalFunctionId functionId, ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber): - FunctionInfo(entryPoint, attributes, functionId, this), + FunctionProxy::FunctionProxy(ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber): m_isTopLevel(false), m_isPublicLibraryCode(false), m_scriptContext(scriptContext), m_utf8SourceInfo(utf8SourceInfo), - m_referenceInParentFunction(nullptr), m_functionNumber(functionNumber), m_defaultEntryPointInfo(nullptr) { @@ -329,16 +327,6 @@ namespace Js void FunctionBody::CopySourceInfo(ParseableFunctionInfo* originalFunctionInfo) { - this->m_sourceIndex = originalFunctionInfo->GetSourceIndex(); - this->m_cchStartOffset = originalFunctionInfo->StartInDocument(); - this->m_cchLength = originalFunctionInfo->LengthInChars(); - this->m_lineNumber = originalFunctionInfo->GetRelativeLineNumber(); - this->m_columnNumber = originalFunctionInfo->GetRelativeColumnNumber(); - this->m_isEval = originalFunctionInfo->IsEval(); - this->m_isDynamicFunction = originalFunctionInfo->IsDynamicFunction(); - this->m_cbStartOffset = originalFunctionInfo->StartOffset(); - this->m_cbLength = originalFunctionInfo->LengthInBytes(); - this->FinishSourceInfo(); } @@ -392,7 +380,7 @@ namespace Js } FunctionBody * FunctionBody::NewFromRecycler(ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif @@ -407,7 +395,7 @@ namespace Js } FunctionBody * FunctionBody::NewFromRecycler(ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif @@ -423,12 +411,12 @@ namespace Js FunctionBody::FunctionBody(ScriptContext* scriptContext, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, Utf8SourceInfo* utf8SourceInfo, uint uFunctionNumber, uint uScriptId, - Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif ) : - ParseableFunctionInfo(scriptContext->CurrentThunk, nestedCount, functionId, utf8SourceInfo, scriptContext, uFunctionNumber, displayName, displayNameLength, displayShortNameOffset, attributes, boundPropertyRecords), + ParseableFunctionInfo(scriptContext->CurrentThunk, nestedCount, functionId, utf8SourceInfo, scriptContext, uFunctionNumber, displayName, displayNameLength, displayShortNameOffset, attributes, boundPropertyRecords, flags), counters(this), m_uScriptId(uScriptId), cleanedUp(false), @@ -451,10 +439,10 @@ namespace Js m_argUsedForBranch(0), m_envDepth((uint16)-1), interpretedCount(0), + lastInterpretedCount(0), loopInterpreterLimit(CONFIG_FLAG(LoopInterpretCount)), savedPolymorphicCacheState(0), debuggerScopeIndex(0), - flags(flags), m_hasFinally(false), #if ENABLE_PROFILE_INFO dynamicProfileInfo(nullptr), @@ -565,6 +553,119 @@ namespace Js InitDisableInlineSpread(); } + bool FunctionBody::InterpretedSinceCallCountCollection() const + { + return this->interpretedCount != this->lastInterpretedCount; + } + + void FunctionBody::CollectInterpretedCounts() + { + this->lastInterpretedCount = this->interpretedCount; + } + + void FunctionBody::IncrInactiveCount(uint increment) + { + this->inactiveCount = UInt32Math::Add(this->inactiveCount, increment); + } + + bool FunctionBody::IsActiveFunction(ActiveFunctionSet * pActiveFuncs) const + { + return !!pActiveFuncs->Test(this->GetFunctionNumber()); + } + + bool FunctionBody::TestAndUpdateActiveFunctions(ActiveFunctionSet * pActiveFuncs) const + { + return !!pActiveFuncs->TestAndSet(this->GetFunctionNumber()); + } + + void FunctionBody::UpdateActiveFunctionSet(ActiveFunctionSet *pActiveFuncs) const + { + if (this->TestAndUpdateActiveFunctions(pActiveFuncs)) + { + return; + } + FunctionCodeGenRuntimeData **data = this->GetCodeGenRuntimeDataWithLock(); + if (data == nullptr) + { + return; + } + for (uint i = 0; i < this->GetProfiledCallSiteCount(); i++) + { + for (FunctionCodeGenRuntimeData *inlineeData = data[i]; inlineeData; inlineeData = inlineeData->GetNext()) + { + inlineeData->GetFunctionBody()->UpdateActiveFunctionSet(pActiveFuncs); + } + } + } + + bool FunctionBody::DoRedeferFunction(uint inactiveThreshold) const + { + bool isJitCandidate = false; + + if (!(this->GetFunctionInfo()->GetFunctionProxy() == this && + this->CanBeDeferred() && + this->GetByteCode() && + this->GetCanDefer())) + { + return false; + } + + if (!PHASE_FORCE(Js::RedeferralPhase, this) && !PHASE_STRESS(Js::RedeferralPhase, this)) + { + uint inactiveCount; + auto fn = [&](){ inactiveCount = 0xFFFFFFFF; }; + inactiveCount = UInt32Math::Mul(this->GetInactiveCount(), this->GetCompileCount(), fn); + if (inactiveCount < inactiveThreshold) + { + return false; + } + } + + // Make sure the function won't be jitted + MapEntryPoints([&](int index, FunctionEntryPointInfo *entryPointInfo) + { + if (entryPointInfo->IsCodeGenPending() || entryPointInfo->IsCodeGenQueued() || entryPointInfo->IsCodeGenRecorded() || (entryPointInfo->IsCodeGenDone() && !entryPointInfo->nativeEntryPointProcessed)) + { + isJitCandidate = true; + } + }); + if (isJitCandidate) + { + return false; + } + + return true; + } + + void FunctionBody::RedeferFunction() + { + Assert(this->CanBeDeferred()); + + PHASE_PRINT_TRACE(Js::RedeferralPhase, this, L"Redeferring function %d.%d: %s\n", + GetSourceContextId(), GetLocalFunctionId(), + GetDisplayName() ? GetDisplayName() : L"(Anonymous function)"); + + ParseableFunctionInfo * parseableFunctionInfo = + Js::ParseableFunctionInfo::NewDeferredFunctionFromFunctionBody(this); + FunctionInfo * functionInfo = this->GetFunctionInfo(); + + this->MapFunctionObjectTypes([&](DynamicType* type) + { + Assert(type->GetTypeId() == TypeIds_Function); + + ScriptFunctionType* functionType = (ScriptFunctionType*)type; + functionType->SetEntryPoint(GetScriptContext()->DeferredParsingThunk); + }); + + this->Cleanup(false); + + // New allocation is done at this point, so update existing structures + // Adjust functionInfo attributes, point to new proxy + functionInfo->SetAttributes((FunctionInfo::Attributes)(functionInfo->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); + functionInfo->SetFunctionProxy(parseableFunctionInfo); + functionInfo->SetOriginalEntryPoint(DefaultEntryThunk); + } + void FunctionBody::SetDefaultFunctionEntryPointInfo(FunctionEntryPointInfo* entryPointInfo, const JavascriptMethod originalEntryPoint) { Assert(entryPointInfo); @@ -604,7 +705,7 @@ namespace Js } ByteBlock* - FunctionBody::GetByteCode() + FunctionBody::GetByteCode() const { return this->byteCodeBlock; } @@ -854,7 +955,7 @@ namespace Js #if DBG BOOL FunctionBody::IsInterpreterThunk() const { - bool isInterpreterThunk = this->originalEntryPoint == DefaultEntryThunk; + bool isInterpreterThunk = this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk; #if DYNAMIC_INTERPRETER_THUNK isInterpreterThunk = isInterpreterThunk || IsDynamicInterpreterThunk(); #endif @@ -864,7 +965,7 @@ namespace Js BOOL FunctionBody::IsDynamicInterpreterThunk() const { #if DYNAMIC_INTERPRETER_THUNK - return this->GetScriptContext()->IsDynamicInterpreterThunk(this->originalEntryPoint); + return this->GetScriptContext()->IsDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked()); #else return FALSE; #endif @@ -1033,9 +1134,10 @@ namespace Js } } - void ParseableFunctionInfo::Copy(FunctionBody* other) + void ParseableFunctionInfo::Copy(ParseableFunctionInfo * other) { #define CopyDeferParseField(field) other->field = this->field; + CopyDeferParseField(flags); CopyDeferParseField(m_isDeclaration); CopyDeferParseField(m_isAccessor); CopyDeferParseField(m_isStrictMode); @@ -1060,44 +1162,62 @@ namespace Js other->SetDeferredStubs(this->GetDeferredStubs()); CopyDeferParseField(m_isAsmjsMode); CopyDeferParseField(m_isAsmJsFunction); -#undef CopyDeferParseField - other->CopySourceInfo(this); - } + other->SetFunctionObjectTypeList(this->GetFunctionObjectTypeList()); + + CopyDeferParseField(m_sourceIndex); + CopyDeferParseField(m_cchStartOffset); + CopyDeferParseField(m_cchLength); + CopyDeferParseField(m_lineNumber); + CopyDeferParseField(m_columnNumber); + CopyDeferParseField(m_cbStartOffset); + CopyDeferParseField(m_cbLength); - void FunctionProxy::SetReferenceInParentFunction(FunctionProxyPtrPtr reference) + this->CopyNestedArray(other); +#undef CopyDeferParseField + } + + void ParseableFunctionInfo::Copy(FunctionBody* other) { - // No need to tag the reference because the first field of the nested array - // is count, so the reference here won't be same as address of the parent nested - // array (even for index 0) - this->m_referenceInParentFunction = reference; + this->Copy(static_cast(other)); + other->CopySourceInfo(this); } - void FunctionProxy::UpdateReferenceInParentFunction(FunctionProxy* newFunctionInfo) + void ParseableFunctionInfo::CopyNestedArray(ParseableFunctionInfo * other) { - if (this->m_referenceInParentFunction) + NestedArray * thisNestedArray = this->GetNestedArray(); + NestedArray * otherNestedArray = other->GetNestedArray(); + if (thisNestedArray == nullptr) { - *m_referenceInParentFunction = newFunctionInfo; + Assert(otherNestedArray == nullptr); + return; + } + Assert(otherNestedArray->nestedCount == thisNestedArray->nestedCount); + + for (uint i = 0; i < thisNestedArray->nestedCount; i++) + { + otherNestedArray->functionInfoArray[i] = thisNestedArray->functionInfoArray[i]; } } // DeferDeserializeFunctionInfo methods - DeferDeserializeFunctionInfo::DeferDeserializeFunctionInfo(int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes) : - FunctionProxy(DefaultDeferredDeserializeThunk, (Attributes)(attributes | DeferredDeserialize), functionId, scriptContext, sourceInfo, functionNumber), + DeferDeserializeFunctionInfo::DeferDeserializeFunctionInfo(int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes) : + FunctionProxy(scriptContext, sourceInfo, functionNumber), m_cache(byteCodeCache), m_functionBytes(serializedFunction), m_displayName(nullptr), m_displayNameLength(0), m_nativeModule(nativeModule) { + this->functionInfo = RecyclerNew(scriptContext->GetRecycler(), FunctionInfo, DefaultDeferredDeserializeThunk, (FunctionInfo::Attributes)(attributes | FunctionInfo::Attributes::DeferredDeserialize), functionId, this); this->m_defaultEntryPointInfo = RecyclerNew(scriptContext->GetRecycler(), ProxyEntryPointInfo, DefaultDeferredDeserializeThunk); PERF_COUNTER_INC(Code, DeferDeserializeFunctionProxy); SetDisplayName(displayName, displayNameLength, displayShortNameOffset, FunctionProxy::SetDisplayNameFlagsDontCopy); } - DeferDeserializeFunctionInfo* DeferDeserializeFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes) + DeferDeserializeFunctionInfo* DeferDeserializeFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes) { return RecyclerNewFinalized(scriptContext->GetRecycler(), DeferDeserializeFunctionInfo, @@ -1124,11 +1244,12 @@ namespace Js // ParseableFunctionInfo methods ParseableFunctionInfo::ParseableFunctionInfo(JavascriptMethod entryPoint, int nestedCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, - const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Attributes attributes, Js::PropertyRecordList* propertyRecords) : - FunctionProxy(entryPoint, attributes, functionId, scriptContext, sourceInfo, functionNumber), + const char16* displayName, uint displayNameLength, uint displayShortNameOffset, FunctionInfo::Attributes attributes, Js::PropertyRecordList* propertyRecords, FunctionBodyFlags flags) : + FunctionProxy(scriptContext, sourceInfo, functionNumber), #if DYNAMIC_INTERPRETER_THUNK m_dynamicInterpreterThunk(nullptr), #endif + flags(flags), m_hasBeenParsed(false), m_isGlobalFunc(false), m_isDeclaration(false), @@ -1166,6 +1287,8 @@ namespace Js ,scopeObjectSize(0) #endif { + this->functionInfo = RecyclerNew(scriptContext->GetRecycler(), FunctionInfo, entryPoint, attributes, functionId, this); + if (nestedCount > 0) { nestedArray = RecyclerNewPlusZ(m_scriptContext->GetRecycler(), @@ -1194,11 +1317,46 @@ namespace Js } SetDisplayName(displayName, displayNameLength, displayShortNameOffset); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); + } + + ParseableFunctionInfo::ParseableFunctionInfo(ParseableFunctionInfo * proxy) : + FunctionProxy(proxy->GetScriptContext(), proxy->GetUtf8SourceInfo(), proxy->GetFunctionNumber()), +#if DYNAMIC_INTERPRETER_THUNK + m_dynamicInterpreterThunk(nullptr), +#endif + m_hasBeenParsed(false), + m_isNamedFunctionExpression(proxy->GetIsNamedFunctionExpression()), + m_isNameIdentifierRef (proxy->GetIsNameIdentifierRef()), + m_isStaticNameFunction(proxy->GetIsStaticNameFunction()), + m_reportedInParamCount(proxy->GetReportedInParamsCount()), + m_reparsed(proxy->IsReparsed()) +#if DBG + ,m_wasEverAsmjsMode(proxy->m_wasEverAsmjsMode) +#endif + { + FunctionInfo * functionInfo = proxy->GetFunctionInfo(); + this->functionInfo = functionInfo; + + uint nestedCount = proxy->GetNestedCount(); + if (nestedCount > 0) + { + nestedArray = RecyclerNewPlusZ(m_scriptContext->GetRecycler(), + nestedCount*sizeof(FunctionProxy*), NestedArray, nestedCount); + } + else + { + nestedArray = nullptr; + } + + proxy->Copy(this); + + SetBoundPropertyRecords(proxy->GetBoundPropertyRecords()); + SetDisplayName(proxy->GetDisplayName(), proxy->GetDisplayNameLength(), proxy->GetShortDisplayNameOffset()); } ParseableFunctionInfo* ParseableFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, - LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecords, Attributes attributes) + LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags) { #ifdef ENABLE_SCRIPT_PROFILING Assert( @@ -1233,8 +1391,34 @@ namespace Js displayName, displayNameLength, displayShortNameOffset, - (Attributes)(attributes | DeferredParse), - propertyRecords); + (FunctionInfo::Attributes)(attributes | FunctionInfo::Attributes::DeferredParse), + propertyRecords, + flags); + } + + ParseableFunctionInfo * + ParseableFunctionInfo::NewDeferredFunctionFromFunctionBody(FunctionBody * functionBody) + { + ScriptContext * scriptContext = functionBody->GetScriptContext(); + uint nestedCount = functionBody->GetNestedCount(); + + ParseableFunctionInfo * info = RecyclerNewWithBarrierFinalized(scriptContext->GetRecycler(), + ParseableFunctionInfo, + functionBody); + + // Create new entry point info + info->m_defaultEntryPointInfo = RecyclerNew(scriptContext->GetRecycler(), ProxyEntryPointInfo, scriptContext->DeferredParsingThunk); + + // Initialize nested function array, update back pointers + for (uint i = 0; i < nestedCount; i++) + { + FunctionInfo * nestedInfo = functionBody->GetNestedFunc(i); + info->SetNestedFunc(nestedInfo, i, 0); + } + + // Update function objects + + return info; } DWORD_PTR FunctionProxy::GetSecondaryHostSourceContext() const @@ -1407,23 +1591,21 @@ namespace Js this->SetDeferredStubs(BuildDeferredStubTree(pnodeFnc, recycler)); } - FunctionProxyArray ParseableFunctionInfo::GetNestedFuncArray() + FunctionInfoArray ParseableFunctionInfo::GetNestedFuncArray() { Assert(GetNestedArray() != nullptr); - return GetNestedArray()->functionProxyArray; + return GetNestedArray()->functionInfoArray; } - void ParseableFunctionInfo::SetNestedFunc(FunctionProxy* nestedFunc, uint index, uint32 flags) + void ParseableFunctionInfo::SetNestedFunc(FunctionInfo* nestedFunc, uint index, uint32 flags) { AssertMsg(index < this->GetNestedCount(), "Trying to write past the nested func array"); - FunctionProxyArray nested = this->GetNestedFuncArray(); + FunctionInfoArray nested = this->GetNestedFuncArray(); nested[index] = nestedFunc; if (nestedFunc) { - nestedFunc->SetReferenceInParentFunction(GetNestedFuncReference(index)); - if (!this->GetSourceContextInfo()->IsDynamic() && nestedFunc->IsDeferredParseFunction() && nestedFunc->GetParseableFunctionInfo()->GetIsDeclaration() && this->GetIsTopLevel() && !(flags & fscrEvalCode)) { this->GetUtf8SourceInfo()->TrackDeferredFunction(nestedFunc->GetLocalFunctionId(), nestedFunc->GetParseableFunctionInfo()); @@ -1432,27 +1614,32 @@ namespace Js } - FunctionProxy* ParseableFunctionInfo::GetNestedFunc(uint index) + FunctionInfo* ParseableFunctionInfo::GetNestedFunc(uint index) { return *(GetNestedFuncReference(index)); } - FunctionProxyPtrPtr ParseableFunctionInfo::GetNestedFuncReference(uint index) + FunctionProxy* ParseableFunctionInfo::GetNestedFunctionProxy(uint index) + { + FunctionInfo *info = GetNestedFunc(index); + return info ? info->GetFunctionProxy() : nullptr; + } + + FunctionInfoPtrPtr ParseableFunctionInfo::GetNestedFuncReference(uint index) { AssertMsg(index < this->GetNestedCount(), "Trying to write past the nested func array"); - FunctionProxyArray nested = this->GetNestedFuncArray(); + FunctionInfoArray nested = this->GetNestedFuncArray(); return &nested[index]; } ParseableFunctionInfo* ParseableFunctionInfo::GetNestedFunctionForExecution(uint index) { - FunctionProxy* currentNestedFunction = this->GetNestedFunc(index); + FunctionInfo* currentNestedFunction = this->GetNestedFunc(index); Assert(currentNestedFunction); if (currentNestedFunction->IsDeferredDeserializeFunction()) { - currentNestedFunction = currentNestedFunction->EnsureDeserialized(); - this->SetNestedFunc(currentNestedFunction, index, 0u); + currentNestedFunction->GetFunctionProxy()->EnsureDeserialized(); } return currentNestedFunction->GetParseableFunctionInfo(); @@ -1461,23 +1648,12 @@ namespace Js void FunctionProxy::UpdateFunctionBodyImpl(FunctionBody * body) { - Assert(functionBodyImpl == ((FunctionProxy*) this)); + FunctionInfo *functionInfo = this->GetFunctionInfo(); + Assert(functionInfo->GetFunctionProxy() == this); Assert(!this->IsFunctionBody() || body == this); - this->functionBodyImpl = body; - this->attributes = (Attributes)(this->attributes & ~(DeferredParse | DeferredDeserialize)); - this->UpdateReferenceInParentFunction(body); - } - - void ParseableFunctionInfo::ClearNestedFunctionParentFunctionReference() - { - this->ForEachNestedFunc([](FunctionProxy* proxy, uint32 index) - { - if (proxy) - { - proxy->SetReferenceInParentFunction(nullptr); - } - return true; - }); + functionInfo->SetFunctionProxy(body); + body->SetFunctionInfo(functionInfo); + body->SetAttributes((FunctionInfo::Attributes)(functionInfo->GetAttributes() & ~(FunctionInfo::Attributes::DeferredParse | FunctionInfo::Attributes::DeferredDeserialize))); } // @@ -1488,17 +1664,18 @@ namespace Js // ParseableFunctionInfo * FunctionProxy::EnsureDeserialized() { - FunctionProxy * executionFunctionBody = this->functionBodyImpl; + Assert(this == this->GetFunctionInfo()->GetFunctionProxy()); + FunctionProxy * executionFunctionBody = this; - if (executionFunctionBody == this && IsDeferredDeserializeFunction()) + if (IsDeferredDeserializeFunction()) { // No need to deserialize function body if scriptContext closed because we can't execute it. // Bigger problem is the script engine might have released bytecode file mapping and we can't deserialize. Assert(!m_scriptContext->IsClosed()); executionFunctionBody = ((DeferDeserializeFunctionInfo*) this)->Deserialize(); - this->functionBodyImpl = executionFunctionBody; - Assert(executionFunctionBody->HasBody()); + this->GetFunctionInfo()->SetFunctionProxy(executionFunctionBody); + Assert(executionFunctionBody->GetFunctionInfo()->HasBody()); Assert(executionFunctionBody != this); } @@ -1512,7 +1689,7 @@ namespace Js ScriptFunctionType * FunctionProxy::EnsureDeferredPrototypeType() { - Assert(this->GetFunctionProxy() == this); + Assert(this->GetFunctionInfo()->GetFunctionProxy() == this); return deferredPrototypeType != nullptr ? static_cast(deferredPrototypeType) : AllocDeferredPrototypeType(); } @@ -1532,10 +1709,20 @@ namespace Js } // Function object type list methods + FunctionProxy::FunctionTypeWeakRefList* FunctionProxy::GetFunctionObjectTypeList() const + { + return static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + } + + void FunctionProxy::SetFunctionObjectTypeList(FunctionProxy::FunctionTypeWeakRefList* list) + { + this->SetAuxPtr(AuxPointerType::FunctionObjectTypeList, list); + } + template void FunctionProxy::MapFunctionObjectTypes(Fn func) { - FunctionTypeWeakRefList* functionObjectTypeList = static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + FunctionTypeWeakRefList* functionObjectTypeList = this->GetFunctionObjectTypeList(); if (functionObjectTypeList != nullptr) { functionObjectTypeList->Map([&](int, FunctionTypeWeakRef* typeWeakRef) @@ -1559,14 +1746,15 @@ namespace Js FunctionProxy::FunctionTypeWeakRefList* FunctionProxy::EnsureFunctionObjectTypeList() { - FunctionTypeWeakRefList* functionObjectTypeList = static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + FunctionTypeWeakRefList* functionObjectTypeList = this->GetFunctionObjectTypeList(); if (functionObjectTypeList == nullptr) { Recycler* recycler = this->GetScriptContext()->GetRecycler(); - this->SetAuxPtr(AuxPointerType::FunctionObjectTypeList, RecyclerNew(recycler, FunctionTypeWeakRefList, recycler)); + functionObjectTypeList = RecyclerNew(recycler, FunctionTypeWeakRefList, recycler); + this->SetFunctionObjectTypeList(functionObjectTypeList); } - return static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + return functionObjectTypeList; } void FunctionProxy::RegisterFunctionObjectType(DynamicType* functionType) @@ -1619,14 +1807,16 @@ namespace Js FunctionBody* DeferDeserializeFunctionInfo::Deserialize() { - if (functionBodyImpl == (FunctionBody*) this) - { - FunctionBody * body = ByteCodeSerializer::DeserializeFunction(this->m_scriptContext, this); - this->Copy(body); - this->UpdateFunctionBodyImpl(body); - } + Assert(this->GetFunctionInfo()->GetFunctionProxy() == this); - return GetFunctionBody(); + FunctionBody * body = ByteCodeSerializer::DeserializeFunction(this->m_scriptContext, this); + this->SetLocalFunctionId(body->GetLocalFunctionId()); + this->SetOriginalEntryPoint(body->GetOriginalEntryPoint()); + this->Copy(body); + this->UpdateFunctionBodyImpl(body); + + Assert(body->GetFunctionBody() == body); + return body; } // @@ -1675,7 +1865,8 @@ namespace Js FunctionBody* ParseableFunctionInfo::Parse(ScriptFunction ** functionRef, bool isByteCodeDeserialization) { - if ((functionBodyImpl != (FunctionBody*) this) || !IsDeferredParseFunction()) + Assert(this == this->GetFunctionInfo()->GetFunctionProxy()); + if (!IsDeferredParseFunction()) { // If not deferredparsed, the functionBodyImpl and this will be the same, just return the current functionBody. Assert(GetFunctionBody()->IsFunctionParsed()); @@ -1706,10 +1897,10 @@ namespace Js this->GetNestedCount(), this->GetUtf8SourceInfo(), this->m_functionNumber, - this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, /* script id */ - this->functionId, /* function id */ + this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, + this->GetLocalFunctionId(), propertyRecordList, - (Attributes)(this->GetAttributes() & ~(Attributes::DeferredDeserialize | Attributes::DeferredParse)), + (FunctionInfo::Attributes)(this->GetAttributes() & ~(FunctionInfo::Attributes::DeferredDeserialize | FunctionInfo::Attributes::DeferredParse)), Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue #ifdef PERF_COUNTERS , false /* is function from deferred deserialized proxy */ @@ -1717,6 +1908,7 @@ namespace Js ); this->Copy(funcBody); + this->UpdateFunctionBodyImpl(funcBody); PERF_COUNTER_DEC(Code, DeferredFunction); if (!this->GetSourceContextInfo()->IsDynamic()) @@ -1855,7 +2047,7 @@ namespace Js hrParser = ps.ParseSourceWithOffset(&parseTree, pszStart, offset, length, charOffset, isCesu8, grfscr, &se, &nextFunctionId, funcBody->GetRelativeLineNumber(), funcBody->GetSourceContextInfo(), funcBody); - Assert(FAILED(hrParser) || nextFunctionId == funcBody->deferredParseNextFunctionId || isDebugOrAsmJsReparse || isByteCodeDeserialization); +// Assert(FAILED(hrParser) || nextFunctionId == funcBody->deferredParseNextFunctionId || isDebugOrAsmJsReparse || isByteCodeDeserialization); if (FAILED(hrParser)) { @@ -1941,11 +2133,13 @@ namespace Js // Restore if the function has nameIdentifier reference, as that name on the left side will not be parsed again while deferparse. funcBody->SetIsNameIdentifierRef(this->GetIsNameIdentifierRef()); - this->UpdateFunctionBodyImpl(funcBody); this->m_hasBeenParsed = true; + returnFunctionBody = funcBody; + } + else + { + returnFunctionBody = this->GetFunctionBody(); } - - returnFunctionBody = GetFunctionBody(); LEAVE_PINNED_SCOPE(); @@ -1973,10 +2167,10 @@ namespace Js this->GetNestedCount(), this->GetUtf8SourceInfo(), this->m_functionNumber, - this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, /* script id */ - this->functionId, /* function id */ + this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, + this->GetLocalFunctionId(), propertyRecordList, - (Attributes)(this->GetAttributes() & ~(Attributes::DeferredDeserialize | Attributes::DeferredParse)), + (FunctionInfo::Attributes)(this->GetAttributes() & ~(FunctionInfo::Attributes::DeferredDeserialize | FunctionInfo::Attributes::DeferredParse)), Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue #ifdef PERF_COUNTERS , false /* is function from deferred deserialized proxy */ @@ -2046,7 +2240,9 @@ namespace Js UpdateFunctionBodyImpl(funcBody); m_hasBeenParsed = true; - returnFunctionBody = GetFunctionBody(); + Assert(funcBody->GetFunctionBody() == funcBody); + + returnFunctionBody = funcBody; LEAVE_PINNED_SCOPE(); @@ -2302,17 +2498,14 @@ namespace Js #if DBG_DUMP if (PHASE_TRACE1(Js::FunctionSourceInfoParsePhase)) { - if (this->HasBody()) + Assert(this->GetFunctionInfo()->HasBody()); + if (this->IsFunctionBody()) { - FunctionProxy* proxy = this->GetFunctionProxy(); - if (proxy->IsFunctionBody()) - { - FunctionBody* functionBody = this->GetFunctionBody(); - Assert( functionBody != nullptr ); + FunctionBody* functionBody = this->GetFunctionBody(); + Assert( functionBody != nullptr ); - functionBody->PrintStatementSourceLineFromStartOffset(functionBody->StartInDocument()); - Output::Flush(); - } + functionBody->PrintStatementSourceLineFromStartOffset(functionBody->StartInDocument()); + Output::Flush(); } } #endif @@ -2925,7 +3118,7 @@ namespace Js BOOL FunctionBody::IsNativeOriginalEntryPoint() const { #if ENABLE_NATIVE_CODEGEN - return this->GetScriptContext()->IsNativeAddress((void*)this->originalEntryPoint); + return this->GetScriptContext()->IsNativeAddress(this->GetOriginalEntryPoint_Unchecked()); #else return false; #endif @@ -2936,13 +3129,11 @@ namespace Js const FunctionEntryPointInfo *const simpleJitEntryPointInfo = GetSimpleJitEntryPointInfo(); return simpleJitEntryPointInfo && - reinterpret_cast(simpleJitEntryPointInfo->GetNativeAddress()) == originalEntryPoint; + reinterpret_cast(simpleJitEntryPointInfo->GetNativeAddress()) == GetOriginalEntryPoint_Unchecked(); } void FunctionProxy::Finalize(bool isShutdown) { - __super::Finalize(isShutdown); - this->CleanupFunctionProxyCounters(); } @@ -2986,7 +3177,7 @@ namespace Js bool FunctionProxy::HasValidNonProfileEntryPoint() const { JavascriptMethod directEntryPoint = this->GetDefaultEntryPointInfo()->jsMethod; - JavascriptMethod originalEntryPoint = this->originalEntryPoint; + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); // Check the direct entry point to see if it is codegen thunk // if it is not, the background codegen thread has updated both original entry point and direct entry point @@ -3006,11 +3197,13 @@ namespace Js bool FunctionProxy::HasValidProfileEntryPoint() const { JavascriptMethod directEntryPoint = this->GetDefaultEntryPointInfo()->jsMethod; - if (this->originalEntryPoint == DefaultDeferredParsingThunk) + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); + + if (originalEntryPoint == DefaultDeferredParsingThunk) { return directEntryPoint == ProfileDeferredParsingThunk; } - if (this->originalEntryPoint == DefaultDeferredDeserializeThunk) + if (originalEntryPoint == DefaultDeferredDeserializeThunk) { return directEntryPoint == ProfileDeferredDeserializeThunk; } @@ -3067,28 +3260,31 @@ namespace Js #endif this->SetEntryPoint(this->GetDefaultEntryPointInfo(), m_scriptContext->DeferredParsingThunk); - originalEntryPoint = DefaultDeferredParsingThunk; + this->SetOriginalEntryPoint(DefaultDeferredParsingThunk); } void ParseableFunctionInfo::SetInitialDefaultEntryPoint() { #ifdef ENABLE_SCRIPT_PROFILING Assert(m_scriptContext->CurrentThunk == ProfileEntryThunk || m_scriptContext->CurrentThunk == DefaultEntryThunk); - Assert(originalEntryPoint == DefaultDeferredParsingThunk || originalEntryPoint == ProfileDeferredParsingThunk || - originalEntryPoint == DefaultDeferredDeserializeThunk || originalEntryPoint == ProfileDeferredDeserializeThunk || - originalEntryPoint == DefaultEntryThunk || originalEntryPoint == ProfileEntryThunk); + Assert(this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileEntryThunk); #else Assert(m_scriptContext->CurrentThunk == DefaultEntryThunk); - Assert(originalEntryPoint == DefaultDeferredParsingThunk || - originalEntryPoint == DefaultDeferredDeserializeThunk || - originalEntryPoint == DefaultEntryThunk); + Assert(this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk); #endif Assert(this->m_defaultEntryPointInfo != nullptr); // CONSIDER: we can optimize this to generate the dynamic interpreter thunk up front // If we know that we are in the defer parsing thunk already this->SetEntryPoint(this->GetDefaultEntryPointInfo(), m_scriptContext->CurrentThunk); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); } void FunctionBody::SetCheckCodeGenEntryPoint(FunctionEntryPointInfo* entryPointInfo, JavascriptMethod entryPoint) @@ -3114,17 +3310,17 @@ namespace Js if (m_isAsmJsFunction) { - this->originalEntryPoint = this->m_scriptContext->GetNextDynamicAsmJsInterpreterThunk(&this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint(this->m_scriptContext->GetNextDynamicAsmJsInterpreterThunk(&this->m_dynamicInterpreterThunk)); } else { - this->originalEntryPoint = this->m_scriptContext->GetNextDynamicInterpreterThunk(&this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint(this->m_scriptContext->GetNextDynamicInterpreterThunk(&this->m_dynamicInterpreterThunk)); } JS_ETW(EtwTrace::LogMethodInterpreterThunkLoadEvent(this)); } else { - this->originalEntryPoint = (JavascriptMethod)InterpreterThunkEmitter::ConvertToEntryPoint(this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint((JavascriptMethod)InterpreterThunkEmitter::ConvertToEntryPoint(this->m_dynamicInterpreterThunk)); } } @@ -3142,18 +3338,18 @@ namespace Js if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetEntryPoint(entryPointInfo))) { // We are not doing code gen on this function, just change the entry point directly - Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)); + Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())); GenerateDynamicInterpreterThunk(); - this->SetEntryPoint(entryPointInfo, originalEntryPoint); + this->SetEntryPoint(entryPointInfo, this->GetOriginalEntryPoint_Unchecked()); } else if (this->GetEntryPoint(entryPointInfo) == ProfileEntryThunk) { // We are not doing codegen on this function, just change the entry point directly // Don't replace the profile entry thunk - Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)); + Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())); GenerateDynamicInterpreterThunk(); } - else if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)) + else if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())) { JsUtil::JobProcessor * jobProcessor = this->GetScriptContext()->GetThreadContext()->GetJobProcessor(); if (jobProcessor->ProcessesInBackground()) @@ -3161,7 +3357,7 @@ namespace Js JsUtil::BackgroundJobProcessor * backgroundJobProcessor = static_cast(jobProcessor); AutoCriticalSection autocs(backgroundJobProcessor->GetCriticalSection()); // Check again under lock - if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)) + if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())) { // If the original entry point is DelayDynamicInterpreterThunk then there must be a version of this // function being codegen'd. @@ -3177,7 +3373,7 @@ namespace Js GenerateDynamicInterpreterThunk(); } } - return this->originalEntryPoint; + return this->GetOriginalEntryPoint_Unchecked(); } #endif @@ -3195,7 +3391,7 @@ namespace Js // keep originalEntryPoint updated with the latest known good native entry point if (entryPointInfo == this->GetDefaultEntryPointInfo()) { - this->originalEntryPoint = originalEntryPoint; + this->SetOriginalEntryPoint(originalEntryPoint); } if (entryPointInfo->entryPointIndex == 0 && this->NeedEnsureDynamicProfileInfo()) @@ -3440,33 +3636,42 @@ namespace Js } } - void FunctionBody::SetStackNestedFuncParent(FunctionBody * parentFunctionBody) + void FunctionBody::SetStackNestedFuncParent(FunctionInfo * parentFunctionInfo) { - Assert(this->GetStackNestedFuncParent() == nullptr); - Assert(CanDoStackNestedFunc()); + FunctionBody * parentFunctionBody = parentFunctionInfo->GetFunctionBody(); + RecyclerWeakReference* parent = this->GetStackNestedFuncParent(); + if (parent != nullptr) + { + Assert(parent->Get() == parentFunctionInfo); + return; + } +// Redeferral invalidates this assertion, as we may be recompiling with a different view of nested functions and +// thus making different stack-nested-function decisions. I'm inclined to allow this, since things that have been +// re-deferred will likely not be executed again, so it makes sense to exclude them from our analysis. +// Assert(CanDoStackNestedFunc()); Assert(parentFunctionBody->DoStackNestedFunc()); - this->SetAuxPtr(AuxPointerType::StackNestedFuncParent, this->GetScriptContext()->GetRecycler()->CreateWeakReferenceHandle(parentFunctionBody)); + this->SetAuxPtr(AuxPointerType::StackNestedFuncParent, this->GetScriptContext()->GetRecycler()->CreateWeakReferenceHandle(parentFunctionInfo)); } - FunctionBody * FunctionBody::GetStackNestedFuncParentStrongRef() + FunctionInfo * FunctionBody::GetStackNestedFuncParentStrongRef() { Assert(this->GetStackNestedFuncParent() != nullptr); return this->GetStackNestedFuncParent()->Get(); } - RecyclerWeakReference * FunctionBody::GetStackNestedFuncParent() + RecyclerWeakReference * FunctionBody::GetStackNestedFuncParent() { - return static_cast*>(this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)); + return static_cast*>(this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)); } - FunctionBody * FunctionBody::GetAndClearStackNestedFuncParent() + FunctionInfo * FunctionBody::GetAndClearStackNestedFuncParent() { if (this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)) { - FunctionBody * parentFunctionBody = GetStackNestedFuncParentStrongRef(); + FunctionInfo * parentFunctionInfo = GetStackNestedFuncParentStrongRef(); ClearStackNestedFuncParent(); - return parentFunctionBody; + return parentFunctionInfo; } return nullptr; } @@ -4124,7 +4329,7 @@ namespace Js } #endif - void FunctionBody::SetIsNonUserCode(bool set) + void ParseableFunctionInfo::SetIsNonUserCode(bool set) { // Mark current function as a non-user code, so that we can distinguish cases where exceptions are // caught in non-user code (see ProbeContainer::HasAllowedForException). @@ -4133,7 +4338,7 @@ namespace Js // Propagate setting for all functions in this scope (nested). this->ForEachNestedFunc([&](FunctionProxy* proxy, uint32 index) { - Js::FunctionBody * pBody = proxy->GetFunctionBody(); + ParseableFunctionInfo * pBody = proxy->GetParseableFunctionInfo(); if (pBody != nullptr) { pBody->SetIsNonUserCode(set); @@ -4279,11 +4484,11 @@ namespace Js if (!IsIntermediateCodeGenThunk(defaultEntryPointInfo->jsMethod) && defaultEntryPointInfo->jsMethod != DynamicProfileInfo::EnsureDynamicProfileInfoThunk) { - if (this->originalEntryPoint == DefaultDeferredParsingThunk) + if (this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk) { defaultEntryPointInfo->jsMethod = ProfileDeferredParsingThunk; } - else if (this->originalEntryPoint == DefaultDeferredDeserializeThunk) + else if (this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk) { defaultEntryPointInfo->jsMethod = ProfileDeferredDeserializeThunk; } @@ -4305,7 +4510,7 @@ namespace Js if (!this->HasValidEntryPoint()) { OUTPUT_TRACE_DEBUGONLY(Js::ScriptProfilerPhase, _u("FunctionBody::SetEntryToProfileMode, Assert due to HasValidEntryPoint(), directEntrypoint : 0x%0IX, originalentrypoint : 0x%0IX\n"), - this->GetDefaultEntryPointInfo()->jsMethod, this->originalEntryPoint); + this->GetDefaultEntryPointInfo()->jsMethod, this->GetOriginalEntryPoint()); AssertMsg(false, "Not a valid EntryPoint"); } @@ -4354,9 +4559,9 @@ namespace Js #endif // Store the originalEntryPoint to restore it back immediately. - JavascriptMethod originalEntryPoint = this->originalEntryPoint; + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); this->CreateNewDefaultEntryPoint(); - this->originalEntryPoint = originalEntryPoint; + this->SetOriginalEntryPoint(originalEntryPoint); if (this->m_defaultEntryPointInfo) { this->GetDefaultFunctionEntryPointInfo()->entryPointIndex = 0; @@ -4493,11 +4698,11 @@ namespace Js defaultEntryPointInfo->jsMethod = DefaultDeferredParsingThunk; } - this->originalEntryPoint = DefaultDeferredParsingThunk; + this->SetOriginalEntryPoint(DefaultDeferredParsingThunk); // Abandon the shared type so a new function will get a new one this->deferredPrototypeType = nullptr; - this->attributes = (FunctionInfo::Attributes) (this->attributes | FunctionInfo::Attributes::DeferredParse); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); } // Set other state back to before parse as well @@ -4541,7 +4746,7 @@ namespace Js this->entryPoints->ClearAndZero(); this->CreateNewDefaultEntryPoint(); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); m_defaultEntryPointInfo->jsMethod = m_scriptContext->CurrentThunk; if (this->deferredPrototypeType) @@ -4556,12 +4761,12 @@ namespace Js void FunctionBody::AddDeferParseAttribute() { - this->attributes = (FunctionInfo::Attributes) (this->attributes | DeferredParse); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); } void FunctionBody::RemoveDeferParseAttribute() { - this->attributes = (FunctionInfo::Attributes) (this->attributes & (~DeferredParse)); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() & (~FunctionInfo::Attributes::DeferredParse))); } Js::DebuggerScope * FunctionBody::GetDiagCatchScopeObjectAt(int byteCodeOffset) @@ -6493,7 +6698,7 @@ namespace Js if(GetDefaultFunctionEntryPointInfo() == simpleJitEntryPointInfo) { Assert(GetExecutionMode() == ExecutionMode::SimpleJit); - const int newSimpleJitCallCount = max(0, simpleJitEntryPointInfo->callsCount + limitScale); + const int newSimpleJitCallCount = max(0, (int)simpleJitEntryPointInfo->callsCount + limitScale); Assert(static_cast(static_cast(newSimpleJitCallCount)) == newSimpleJitCallCount); SetSimpleJitCallCount(static_cast(newSimpleJitCallCount)); } @@ -6631,11 +6836,11 @@ namespace Js } // Simple JIT counts down and transitions on overflow - const uint8 callCount = simpleJitEntryPointInfo->callsCount; + const uint32 callCount = simpleJitEntryPointInfo->callsCount; Assert(simpleJitLimit == 0 ? callCount == 0 : simpleJitLimit > callCount); return callCount == 0 ? static_cast(simpleJitLimit) : - static_cast(simpleJitLimit) - callCount - 1; + static_cast(simpleJitLimit) - static_cast(callCount) - 1; } void FunctionBody::ResetSimpleJitLimitAndCallCount() @@ -7041,7 +7246,6 @@ namespace Js #endif this->Cleanup(isShutdown); this->CleanupSourceInfo(isShutdown); - this->ClearNestedFunctionParentFunctionReference(); this->CleanupFunctionProxyCounters(); } @@ -7182,6 +7386,7 @@ namespace Js } else { + inlineCache->Unregister(this->m_scriptContext); AllocatorDelete(CacheAllocator, this->m_scriptContext->GetIsInstInlineCacheAllocator(), inlineCache); } } @@ -7473,7 +7678,7 @@ namespace Js void FunctionBody::InitDisableInlineApply() { SetDisableInlineApply( - (this->functionId != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this)) || + (this->GetLocalFunctionId() != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this)) || PHASE_OFF(Js::InlineApplyPhase, this)); } @@ -9000,6 +9205,16 @@ namespace Js } #endif + bool FunctionEntryPointInfo::ExecutedSinceCallCountCollection() const + { + return this->callsCount != this->lastCallsCount; + } + + void FunctionEntryPointInfo::CollectCallCounts() + { + this->lastCallsCount = this->callsCount; + } + void FunctionEntryPointInfo::ReleasePendingWorkItem() { // Do this outside of Cleanup since cleanup can be called from the background thread @@ -9035,7 +9250,7 @@ namespace Js { if (this->IsCodeGenDone()) { - Assert(this->functionProxy->HasBody()); + Assert(this->functionProxy->GetFunctionInfo()->HasBody()); #if ENABLE_NATIVE_CODEGEN if (nullptr != this->inlineeFrameMap) { diff --git a/lib/Runtime/Base/FunctionBody.h b/lib/Runtime/Base/FunctionBody.h index b50db983bce..2c90851a1d1 100644 --- a/lib/Runtime/Base/FunctionBody.h +++ b/lib/Runtime/Base/FunctionBody.h @@ -17,6 +17,8 @@ class DynamicProfileMutatorImpl; #endif #define MAX_FUNCTION_BODY_DEBUG_STRING_SIZE 42 //11*3+8+1 +typedef BVSparse ActiveFunctionSet; + namespace Js { #pragma region Class Forward Declarations @@ -724,6 +726,11 @@ namespace Js return this->GetState() == CodeGenPending; } + bool IsCodeGenRecorded() const + { + return this->GetState() == CodeGenRecorded; + } + bool IsNativeCode() const { #if ENABLE_NATIVE_CODEGEN @@ -1061,8 +1068,8 @@ namespace Js int32 localVarChangedOffset; uint entryPointIndex; - uint8 callsCount; - uint8 lastCallsCount; + uint32 callsCount; + uint32 lastCallsCount; bool nativeEntryPointProcessed; private: @@ -1082,6 +1089,9 @@ namespace Js //End AsmJS Support #endif + bool ExecutedSinceCallCountCollection() const; + void CollectCallCounts(); + virtual FunctionBody *GetFunctionBody() const override; #if ENABLE_NATIVE_CODEGEN ExecutionMode GetJitMode() const; @@ -1091,9 +1101,9 @@ namespace Js virtual void Expire() override; virtual void EnterExpirableCollectMode() override; virtual void ResetOnNativeCodeInstallFailure() override; - static const uint8 GetDecrCallCountPerBailout() + static const uint32 GetDecrCallCountPerBailout() { - return (uint8)CONFIG_FLAG(CallsToBailoutsRatioForRejit) + 1; + return (uint32)CONFIG_FLAG(CallsToBailoutsRatioForRejit) + 1; } #endif @@ -1290,8 +1300,8 @@ namespace Js class FunctionProxy; - typedef FunctionProxy** FunctionProxyArray; - typedef FunctionProxy** FunctionProxyPtrPtr; + typedef FunctionInfo** FunctionInfoArray; + typedef FunctionInfo** FunctionInfoPtrPtr; // // FunctionProxy represents a user defined function @@ -1299,7 +1309,7 @@ namespace Js // The function need not have been compiled yet- it could be parsed or compiled // at a later time // - class FunctionProxy : public FunctionInfo + class FunctionProxy : public FinalizableObject { static CriticalSection GlobalLock; public: @@ -1308,9 +1318,8 @@ namespace Js typedef JsUtil::List FunctionTypeWeakRefList; protected: - FunctionProxy(JavascriptMethod entryPoint, Attributes attributes, - LocalFunctionId functionId, ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber); - DEFINE_VTABLE_CTOR_NO_REGISTER(FunctionProxy, FunctionInfo); + FunctionProxy(ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber); + DEFINE_VTABLE_CTOR_NOBASE(FunctionProxy); enum class AuxPointerType : uint8 { DeferredStubs = 0, @@ -1348,6 +1357,8 @@ namespace Js void* GetAuxPtrWithLock(AuxPointerType e) const; void SetAuxPtr(AuxPointerType e, void* ptr); + FunctionInfo *functionInfo; + public: enum SetDisplayNameFlags { @@ -1356,6 +1367,55 @@ namespace Js SetDisplayNameFlagsRecyclerAllocated = 2 }; + virtual void Dispose(bool isShutdown) override + { + } + + virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); } + + static const uint GetOffsetOfFunctionInfo() { return offsetof(FunctionProxy, functionInfo); } + FunctionInfo * GetFunctionInfo() const + { + return this->functionInfo; + } + void SetFunctionInfo(FunctionInfo * functionInfo) + { + this->functionInfo = functionInfo; + } + + LocalFunctionId GetLocalFunctionId() const; + void SetLocalFunctionId(LocalFunctionId functionId); + + ParseableFunctionInfo* GetParseableFunctionInfo() const; + ParseableFunctionInfo** GetParseableFunctionInfoRef() const; + DeferDeserializeFunctionInfo* GetDeferDeserializeFunctionInfo() const; + FunctionBody * GetFunctionBody() const; + + void VerifyOriginalEntryPoint() const; + JavascriptMethod GetOriginalEntryPoint() const; + JavascriptMethod GetOriginalEntryPoint_Unchecked() const; + void SetOriginalEntryPoint(const JavascriptMethod originalEntryPoint); + + bool IsAsync() const; + bool IsDeferred() const; + bool IsLambda() const; + bool IsConstructor() const; + bool IsGenerator() const; + bool IsClassConstructor() const; + bool IsClassMethod() const; + bool IsModule() const; + bool HasSuperReference() const; + bool IsCoroutine() const; + bool GetCapturesThis() const; + void SetCapturesThis(); + bool GetEnclosedByGlobalFunc() const; + void SetEnclosedByGlobalFunc(); + bool CanBeDeferred() const; + BOOL IsDeferredDeserializeFunction() const; + BOOL IsDeferredParseFunction() const; + FunctionInfo::Attributes GetAttributes() const; + void SetAttributes(FunctionInfo::Attributes attributes); + Recycler* GetRecycler() const; uint32 GetSourceContextId() const; char16* GetDebugNumberSet(wchar(&bufferToWriteTo)[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]) const; @@ -1367,8 +1427,6 @@ namespace Js ScriptContext* GetScriptContext() const; Utf8SourceInfo* GetUtf8SourceInfo() const { return this->m_utf8SourceInfo; } void SetUtf8SourceInfo(Utf8SourceInfo* utf8SourceInfo) { m_utf8SourceInfo = utf8SourceInfo; } - void SetReferenceInParentFunction(FunctionProxyPtrPtr reference); - void UpdateReferenceInParentFunction(FunctionProxy* newFunctionInfo); bool IsInDebugMode() const { return this->m_utf8SourceInfo->IsInDebugMode(); } DWORD_PTR GetSecondaryHostSourceContext() const; @@ -1382,6 +1440,8 @@ namespace Js void UpdateFunctionBodyImpl(FunctionBody* body); bool IsFunctionBody() const; + uint GetCompileCount() const; + void SetCompileCount(uint count); ProxyEntryPointInfo* GetDefaultEntryPointInfo() const; ScriptFunctionType * GetDeferredPrototypeType() const; ScriptFunctionType * EnsureDeferredPrototypeType(); @@ -1389,6 +1449,8 @@ namespace Js // Function object type list methods FunctionTypeWeakRefList* EnsureFunctionObjectTypeList(); + FunctionTypeWeakRefList* GetFunctionObjectTypeList() const; + void SetFunctionObjectTypeList(FunctionTypeWeakRefList* list); void RegisterFunctionObjectType(DynamicType* functionType); template void MapFunctionObjectTypes(Fn func); @@ -1451,7 +1513,6 @@ namespace Js NoWriteBarrierPtr m_scriptContext; // Memory context for this function body WriteBarrierPtr m_utf8SourceInfo; // WriteBarrier-TODO: Consider changing this to NoWriteBarrierPtr, and skip tagging- also, tagging is likely unnecessary since that pointer in question is likely not resolvable - FunctionProxyPtrPtr m_referenceInParentFunction; // Reference to nested function reference to this function in the parent function body (tagged to not be actual reference) WriteBarrierPtr deferredPrototypeType; WriteBarrierPtr m_defaultEntryPointInfo; // The default entry point info for the function proxy @@ -1459,6 +1520,7 @@ namespace Js bool m_isTopLevel : 1; // Indicates that this function is top-level function, currently being used in script profiler and debugger bool m_isPublicLibraryCode: 1; // Indicates this function is public boundary library code that should be visible in JS stack + bool m_canBeDeferred : 1; void CleanupFunctionProxyCounters() { PERF_COUNTER_DEC(Code, TotalFunction); @@ -1472,6 +1534,219 @@ namespace Js ScriptFunctionType * AllocDeferredPrototypeType(); }; + inline Js::LocalFunctionId FunctionProxy::GetLocalFunctionId() const + { + Assert(GetFunctionInfo()); + return GetFunctionInfo()->GetLocalFunctionId(); + } + + inline void FunctionProxy::SetLocalFunctionId(LocalFunctionId functionId) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->SetLocalFunctionId(functionId); + } + + inline void FunctionProxy::VerifyOriginalEntryPoint() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->VerifyOriginalEntryPoint(); + } + + inline JavascriptMethod FunctionProxy::GetOriginalEntryPoint() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetOriginalEntryPoint(); + } + + inline JavascriptMethod FunctionProxy::GetOriginalEntryPoint_Unchecked() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetOriginalEntryPoint_Unchecked(); + } + + inline void FunctionProxy::SetOriginalEntryPoint(const JavascriptMethod originalEntryPoint) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetOriginalEntryPoint(originalEntryPoint); + } + + inline bool FunctionProxy::IsAsync() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsAsync(); + } + + inline bool FunctionProxy::IsDeferred() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferred(); + } + + inline bool FunctionProxy::IsConstructor() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsConstructor(); + } + + inline bool FunctionProxy::IsGenerator() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsGenerator(); + } + + inline bool FunctionProxy::HasSuperReference() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->HasSuperReference(); + } + + inline bool FunctionProxy::IsCoroutine() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsCoroutine(); + } + + inline bool FunctionProxy::GetCapturesThis() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetCapturesThis(); + } + + inline void FunctionProxy::SetCapturesThis() + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetCapturesThis(); + } + + inline bool FunctionProxy::GetEnclosedByGlobalFunc() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetEnclosedByGlobalFunc(); + } + + inline void FunctionProxy::SetEnclosedByGlobalFunc() + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetEnclosedByGlobalFunc(); + } + + inline BOOL FunctionProxy::IsDeferredDeserializeFunction() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferredDeserializeFunction(); + } + + inline BOOL FunctionProxy::IsDeferredParseFunction() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferredParseFunction(); + } + + inline FunctionInfo::Attributes FunctionProxy::GetAttributes() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetAttributes(); + } + + inline void FunctionProxy::SetAttributes(FunctionInfo::Attributes attributes) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetAttributes(attributes); + } + + inline ParseableFunctionInfo** FunctionProxy::GetParseableFunctionInfoRef() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetParseableFunctionInfoRef(); + } + + inline bool FunctionProxy::IsLambda() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsLambda(); + } + + inline bool FunctionProxy::CanBeDeferred() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->CanBeDeferred(); + } + + inline bool FunctionProxy::IsClassConstructor() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsClassConstructor(); + } + + inline bool FunctionProxy::IsClassMethod() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsClassMethod(); + } + + inline bool FunctionProxy::IsModule() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsModule(); + } + + inline uint FunctionProxy::GetCompileCount() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetCompileCount(); + } + + inline void FunctionProxy::SetCompileCount(uint count) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetCompileCount(count); + } + + inline ParseableFunctionInfo* FunctionProxy::GetParseableFunctionInfo() const + { + Assert(!IsDeferredDeserializeFunction()); + return (ParseableFunctionInfo*)this; + } + + inline DeferDeserializeFunctionInfo* FunctionProxy::GetDeferDeserializeFunctionInfo() const + { + Assert(IsDeferredDeserializeFunction()); + return (DeferDeserializeFunctionInfo*)this; + } + + inline FunctionBody * FunctionProxy::GetFunctionBody() const + { + Assert(IsFunctionBody()); + return (FunctionBody*)this; + } + // Represents a function from the byte code cache which will // be deserialized upon use class DeferDeserializeFunctionInfo: public FunctionProxy @@ -1479,9 +1754,9 @@ namespace Js friend struct ByteCodeSerializer; private: - DeferDeserializeFunctionInfo(int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes); + DeferDeserializeFunctionInfo(int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes); public: - static DeferDeserializeFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes); + static DeferDeserializeFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes); virtual void Finalize(bool isShutdown) override; FunctionBody* Deserialize(); @@ -1505,15 +1780,32 @@ namespace Js { friend class ByteCodeBufferReader; + public: + + enum FunctionBodyFlags : byte + { + Flags_None = 0x00, + Flags_StackNestedFunc = 0x01, + Flags_HasOrParentHasArguments = 0x02, + Flags_HasTry = 0x04, + Flags_HasThis = 0x08, + Flags_NonUserCode = 0x10, + Flags_HasOnlyThisStatements = 0x20, + Flags_HasNoExplicitReturnValue = 0x40, // Returns undefined, i.e. has no return statements or return with no expression + Flags_HasRestParameter = 0x80 + }; + protected: - ParseableFunctionInfo(JavascriptMethod method, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Attributes attributes, Js::PropertyRecordList* propertyRecordList); + ParseableFunctionInfo(JavascriptMethod method, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, FunctionInfo::Attributes attributes, Js::PropertyRecordList* propertyRecordList, FunctionBodyFlags flags); + + ParseableFunctionInfo(ParseableFunctionInfo * proxy); public: struct NestedArray { NestedArray(uint32 count) :nestedCount(count) {} uint32 nestedCount; - FunctionProxy* functionProxyArray[0]; + FunctionInfo* functionInfoArray[0]; }; template void ForEachNestedFunc(Fn fn) @@ -1523,7 +1815,7 @@ namespace Js { for (uint i = 0; i < nestedArray->nestedCount; i++) { - if (!fn(nestedArray->functionProxyArray[i], i)) + if (!fn(nestedArray->functionInfoArray[i]->GetFunctionProxy(), i)) { break; } @@ -1535,13 +1827,46 @@ namespace Js uint GetNestedCount() const { return nestedArray == nullptr ? 0 : nestedArray->nestedCount; } public: - static ParseableFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecordList, Attributes attributes); + static ParseableFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecordList, FunctionInfo::Attributes attributes, FunctionBodyFlags flags); + static ParseableFunctionInfo* NewDeferredFunctionFromFunctionBody(FunctionBody *functionBody); DEFINE_VTABLE_CTOR_NO_REGISTER(ParseableFunctionInfo, FunctionProxy); FunctionBody* Parse(ScriptFunction ** functionRef = nullptr, bool isByteCodeDeserialization = false); #ifdef ASMJS_PLAT FunctionBody* ParseAsmJs(Parser * p, __out CompileScriptException * se, __out ParseNodePtr * ptree); #endif + + FunctionBodyFlags GetFlags() const { return flags; } + + static bool GetHasThis(FunctionBodyFlags flags) { return (flags & Flags_HasThis) != 0; } + bool GetHasThis() const { return GetHasThis(flags); } + void SetHasThis(bool has) { SetFlags(has, Flags_HasThis); } + + static bool GetHasTry(FunctionBodyFlags flags) { return (flags & Flags_HasTry) != 0; } + bool GetHasTry() const { return GetHasTry(flags); } + void SetHasTry(bool has) { SetFlags(has, Flags_HasTry); } + + static bool GetHasOrParentHasArguments(FunctionBodyFlags flags) { return (flags & Flags_HasOrParentHasArguments) != 0; } + bool GetHasOrParentHasArguments() const { return GetHasOrParentHasArguments(flags); } + void SetHasOrParentHasArguments(bool has) { SetFlags(has, Flags_HasOrParentHasArguments); } + + static bool DoStackNestedFunc(FunctionBodyFlags flags) { return (flags & Flags_StackNestedFunc) != 0; } + bool DoStackNestedFunc() const { return DoStackNestedFunc(flags); } + void SetStackNestedFunc(bool does) { SetFlags(does, Flags_StackNestedFunc); } + + bool IsNonUserCode() const { return (flags & Flags_NonUserCode) != 0; } + void SetIsNonUserCode(bool set); + + bool GetHasNoExplicitReturnValue() { return (flags & Flags_HasNoExplicitReturnValue) != 0; } + void SetHasNoExplicitReturnValue(bool has) { SetFlags(has, Flags_HasNoExplicitReturnValue); } + + bool GetHasOnlyThisStmts() const { return (flags & Flags_HasOnlyThisStatements) != 0; } + void SetHasOnlyThisStmts(bool has) { SetFlags(has, Flags_HasOnlyThisStatements); } + + static bool GetHasRestParameter(FunctionBodyFlags flags) { return (flags & Flags_HasRestParameter) != 0; } + bool GetHasRestParameter() const { return GetHasRestParameter(flags); } + void SetHasRestParameter() { SetFlags(true, Flags_HasRestParameter); } + virtual uint GetDisplayNameLength() const { return m_displayNameLength; } virtual uint GetShortDisplayNameOffset() const { return m_displayShortNameOffset; } bool GetIsDeclaration() const { return m_isDeclaration; } @@ -1686,7 +2011,9 @@ namespace Js void SetSourceInfo(uint sourceIndex, ParseNodePtr node, bool isEval, bool isDynamicFunction); void SetSourceInfo(uint sourceIndex); + void Copy(ParseableFunctionInfo * other); void Copy(FunctionBody* other); + void CopyNestedArray(ParseableFunctionInfo * other); const char16* GetExternalDisplayName() const; @@ -1716,19 +2043,12 @@ namespace Js this->SetAuxPtr(AuxPointerType::CachedSourceString, sourceString); } - FunctionProxyArray GetNestedFuncArray(); - FunctionProxy* GetNestedFunc(uint index); - FunctionProxyPtrPtr GetNestedFuncReference(uint index); + FunctionInfoArray GetNestedFuncArray(); + FunctionInfo* GetNestedFunc(uint index); + FunctionInfoPtrPtr GetNestedFuncReference(uint index); + FunctionProxy* GetNestedFunctionProxy(uint index); ParseableFunctionInfo* GetNestedFunctionForExecution(uint index); - void SetNestedFunc(FunctionProxy* nestedFunc, uint index, uint32 flags); - void ClearNestedFunctionParentFunctionReference(); - - void SetCapturesThis() { attributes = (Attributes)(attributes | Attributes::CapturesThis); } - bool GetCapturesThis() { return (attributes & Attributes::CapturesThis) != 0; } - - void SetEnclosedByGlobalFunc() { attributes = (Attributes)(attributes | Attributes::EnclosedByGlobalFunc ); } - bool GetEnclosedByGlobalFunc() { return (attributes & Attributes::EnclosedByGlobalFunc) != 0; } - + void SetNestedFunc(FunctionInfo* nestedFunc, uint index, uint32 flags); void BuildDeferredStubs(ParseNode *pnodeFnc); DeferredFunctionStub *GetDeferredStubs() const { return static_cast(this->GetAuxPtr(AuxPointerType::DeferredStubs)); } void SetDeferredStubs(DeferredFunctionStub *stub) { this->SetAuxPtr(AuxPointerType::DeferredStubs, stub); } @@ -1736,6 +2056,18 @@ namespace Js protected: static HRESULT MapDeferredReparseError(HRESULT& hrParse, const CompileScriptException& se); + void SetFlags(bool does, FunctionBodyFlags newFlags) + { + if (does) + { + flags = (FunctionBodyFlags)(flags | newFlags); + } + else + { + flags = (FunctionBodyFlags)(flags & ~newFlags); + } + } + bool m_hasBeenParsed : 1; // Has function body been parsed- true for actual function bodies, false for deferparse bool m_isDeclaration : 1; bool m_isAccessor : 1; // Function is a property getter or setter @@ -2057,19 +2389,6 @@ namespace Js // This value be set on the stack (on a particular offset), when the frame value got changed. static const int LocalsChangeDirtyValue = 1; - enum FunctionBodyFlags : byte - { - Flags_None = 0x00, - Flags_StackNestedFunc = 0x01, - Flags_HasOrParentHasArguments = 0x02, - Flags_HasTry = 0x04, - Flags_HasThis = 0x08, - Flags_NonUserCode = 0x10, - Flags_HasOnlyThisStatements = 0x20, - Flags_HasNoExplicitReturnValue = 0x40, // Returns undefined, i.e. has no return statements or return with no expression - Flags_HasRestParameter = 0x80 - }; - #define DEFINE_FUNCTION_BODY_FIELDS 1 #define CURRENT_ACCESS_MODIFIER public: #include "SerializableFunctionFields.h" @@ -2163,8 +2482,10 @@ namespace Js NoWriteBarrierField committedProfiledIterations; NoWriteBarrierField m_depth; // Indicates how many times the function has been entered (so increases by one on each recursive call, decreases by one when we're done) + NoWriteBarrierField inactiveCount; uint32 interpretedCount; + uint32 lastInterpretedCount; uint32 loopInterpreterLimit; uint32 debuggerScopeIndex; uint32 savedPolymorphicCacheState; @@ -2194,7 +2515,7 @@ namespace Js #endif FunctionBody(ScriptContext* scriptContext, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, Utf8SourceInfo* sourceInfo, - uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* propRecordList, Attributes attributes, FunctionBodyFlags flags + uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* propRecordList, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction = false #endif @@ -2213,7 +2534,7 @@ namespace Js public: FunctionBody(ByteCodeCache* cache, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext): - ParseableFunctionInfo((JavascriptMethod) nullptr, 0, (LocalFunctionId) 0, sourceInfo, scriptContext, 0, nullptr, 0, 0, None, nullptr) + ParseableFunctionInfo((JavascriptMethod) nullptr, 0, (LocalFunctionId) 0, sourceInfo, scriptContext, 0, nullptr, 0, 0, FunctionInfo::Attributes::None, nullptr, Flags_None) { // Dummy constructor- does nothing // Must be stack allocated @@ -2221,14 +2542,14 @@ namespace Js } static FunctionBody * NewFromRecycler(Js::ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes + Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes , FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif ); static FunctionBody * NewFromRecycler(Js::ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes + Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes , FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction @@ -2238,6 +2559,17 @@ namespace Js FunctionEntryPointInfo * GetEntryPointInfo(int index) const; FunctionEntryPointInfo * TryGetEntryPointInfo(int index) const; + bool DoRedeferFunction(uint inactiveThreshold) const; + void RedeferFunction(); + bool IsActiveFunction(ActiveFunctionSet * pActiveFuncs) const; + bool TestAndUpdateActiveFunctions(ActiveFunctionSet * pActiveFuncs) const; + void UpdateActiveFunctionSet(ActiveFunctionSet * pActiveFuncs) const; + uint GetInactiveCount() const { return inactiveCount; } + void SetInactiveCount(uint count) { inactiveCount = count; } + void IncrInactiveCount(uint increment); + bool InterpretedSinceCallCountCollection() const; + void CollectInterpretedCounts(); + Js::RootObjectBase * LoadRootObject() const; Js::RootObjectBase * GetRootObject() const; ByteBlock* GetAuxiliaryData() const { return static_cast(this->GetAuxPtr(AuxPointerType::AuxBlock)); } @@ -2249,7 +2581,7 @@ namespace Js void SetFormalsPropIdArray(PropertyIdArray * propIdArray); PropertyIdArray* GetFormalsPropIdArray(bool checkForNull = true); Var GetFormalsPropIdArrayOrNullObj(); - ByteBlock* GetByteCode(); + ByteBlock* GetByteCode() const; ByteBlock* GetOriginalByteCode(); // Returns original bytecode without probes (such as BPs). Js::ByteCodeCache * GetByteCodeCache() const { return this->byteCodeCache; } void SetByteCodeCache(Js::ByteCodeCache *byteCodeCache) @@ -2496,8 +2828,6 @@ namespace Js void CleanupPerfCounter(); #endif - virtual void Dispose(bool isShutdown) override { } - bool HasRejit() const { if(this->entryPoints) @@ -2616,6 +2946,7 @@ namespace Js // Field accessors bool GetHasBailoutInstrInJittedCode() const { return this->m_hasBailoutInstrInJittedCode; } void SetHasBailoutInstrInJittedCode(bool hasBailout) { this->m_hasBailoutInstrInJittedCode = hasBailout; } + bool GetCanDefer() const { return this->functionInfo->CanBeDeferred() && this->m_depth == 0; } bool GetCanReleaseLoopHeaders() const { return (this->m_depth == 0); } void SetPendingLoopHeaderRelease(bool pendingLoopHeaderRelease) { this->m_pendingLoopHeaderRelease = pendingLoopHeaderRelease; } @@ -2671,7 +3002,7 @@ namespace Js void SetDisableInlineApply(bool set); bool IsInlineSpreadDisabled() const { return disableInlineSpread; } - void InitDisableInlineSpread() { disableInlineSpread = this->functionId != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this); } + void InitDisableInlineSpread() { disableInlineSpread = this->GetLocalFunctionId() != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this); } void SetDisableInlineSpread(bool set) { disableInlineSpread = set; } bool CheckCalleeContextForInlining(FunctionProxy* calleeFunctionProxy); @@ -2802,50 +3133,22 @@ namespace Js private: void ResetProfileIds(); - void SetFlags(bool does, FunctionBodyFlags newFlags) - { - if (does) - { - flags = (FunctionBodyFlags)(flags | newFlags); - } - else - { - flags = (FunctionBodyFlags)(flags & ~newFlags); - } - } public: - FunctionBodyFlags GetFlags() { return this->flags; } - - static bool GetHasThis(FunctionBodyFlags flags) { return (flags & Flags_HasThis) != 0; } - bool GetHasThis() const { return GetHasThis(this->flags); } - void SetHasThis(bool has) { SetFlags(has, Flags_HasThis); } - - static bool GetHasTry(FunctionBodyFlags flags) { return (flags & Flags_HasTry) != 0; } - bool GetHasTry() const { return GetHasTry(this->flags); } - void SetHasTry(bool has) { SetFlags(has, Flags_HasTry); } - bool GetHasFinally() const { return m_hasFinally; } void SetHasFinally(bool has){ m_hasFinally = has; } bool GetFuncEscapes() const { return funcEscapes; } void SetFuncEscapes(bool does) { funcEscapes = does; } - static bool GetHasOrParentHasArguments(FunctionBodyFlags flags) { return (flags & Flags_HasOrParentHasArguments) != 0; } - bool GetHasOrParentHasArguments() const { return GetHasOrParentHasArguments(this->flags); } - void SetHasOrParentHasArguments(bool has) { SetFlags(has, Flags_HasOrParentHasArguments); } - - static bool DoStackNestedFunc(FunctionBodyFlags flags) { return (flags & Flags_StackNestedFunc) != 0; } - bool DoStackNestedFunc() const { return DoStackNestedFunc(flags); } - void SetStackNestedFunc(bool does) { SetFlags(does, Flags_StackNestedFunc); } #if DBG bool CanDoStackNestedFunc() const { return m_canDoStackNestedFunc; } void SetCanDoStackNestedFunc() { m_canDoStackNestedFunc = true; } #endif - RecyclerWeakReference * GetStackNestedFuncParent(); - FunctionBody * GetStackNestedFuncParentStrongRef(); - FunctionBody * GetAndClearStackNestedFuncParent(); + RecyclerWeakReference * GetStackNestedFuncParent(); + FunctionInfo * GetStackNestedFuncParentStrongRef(); + FunctionInfo * GetAndClearStackNestedFuncParent(); void ClearStackNestedFuncParent(); - void SetStackNestedFuncParent(FunctionBody * parentFunctionBody); + void SetStackNestedFuncParent(FunctionInfo * parentFunctionInfo); uint GetScopeSlotArraySize() const { @@ -2871,25 +3174,12 @@ namespace Js bool DoStackFrameDisplay() const { return DoStackClosure(this) && !PHASE_OFF(StackClosurePhase, this); } bool DoStackScopeSlots() const { return DoStackClosure(this) && !PHASE_OFF(StackClosurePhase, this); } - bool IsNonUserCode() const { return (flags & Flags_NonUserCode) != 0; } - void SetIsNonUserCode(bool set); - - bool GetHasNoExplicitReturnValue() { return (flags & Flags_HasNoExplicitReturnValue) != 0; } - void SetHasNoExplicitReturnValue(bool has) { SetFlags(has, Flags_HasNoExplicitReturnValue); } - - bool GetHasOnlyThisStmts() const { return (flags & Flags_HasOnlyThisStatements) != 0; } - void SetHasOnlyThisStmts(bool has) { SetFlags(has, Flags_HasOnlyThisStatements); } - bool GetIsFirstFunctionObject() const { return m_firstFunctionObject; } void SetIsNotFirstFunctionObject() { m_firstFunctionObject = false; } bool GetInlineCachesOnFunctionObject() { return m_inlineCachesOnFunctionObject; } void SetInlineCachesOnFunctionObject(bool has) { m_inlineCachesOnFunctionObject = has; } - static bool GetHasRestParameter(FunctionBodyFlags flags) { return (flags & Flags_HasRestParameter) != 0; } - bool GetHasRestParameter() const { return GetHasRestParameter(this->flags); } - void SetHasRestParameter() { SetFlags(true, Flags_HasRestParameter); } - bool NeedScopeObjectForArguments(bool hasNonSimpleParams) { Assert(HasReferenceableBuiltInArguments()); diff --git a/lib/Runtime/Base/FunctionInfo.cpp b/lib/Runtime/Base/FunctionInfo.cpp index ae9f93c7f02..3259ebeda11 100644 --- a/lib/Runtime/Base/FunctionInfo.cpp +++ b/lib/Runtime/Base/FunctionInfo.cpp @@ -7,7 +7,7 @@ namespace Js { FunctionInfo::FunctionInfo(JavascriptMethod entryPoint, Attributes attributes, LocalFunctionId functionId, FunctionProxy* functionBodyImpl) - : originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(functionBodyImpl), functionId(functionId) + : originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(functionBodyImpl), functionId(functionId), compileCount(0) { #if !DYNAMIC_INTERPRETER_THUNK Assert(entryPoint != nullptr); @@ -40,8 +40,7 @@ namespace Js FunctionBody * FunctionInfo::GetFunctionBody() const { - Assert(functionBodyImpl == nullptr || functionBodyImpl->IsFunctionBody()); - return (FunctionBody *)functionBodyImpl; + return functionBodyImpl == nullptr ? nullptr : functionBodyImpl->GetFunctionBody(); } FunctionInfo::Attributes FunctionInfo::GetAttributes(Js::RecyclableObject * function) diff --git a/lib/Runtime/Base/FunctionInfo.h b/lib/Runtime/Base/FunctionInfo.h index 89f7c4cff73..32afa8f399a 100644 --- a/lib/Runtime/Base/FunctionInfo.h +++ b/lib/Runtime/Base/FunctionInfo.h @@ -38,10 +38,16 @@ namespace Js Async = 0x10000, Module = 0x20000, // The function is the function body wrapper for a module EnclosedByGlobalFunc = 0x40000, + CanDefer = 0x80000 }; - FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = NULL); + FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr); static DWORD GetFunctionBodyImplOffset() { return offsetof(FunctionInfo, functionBodyImpl); } + static BYTE GetOffsetOfFunctionProxy() + { + CompileAssert(offsetof(FunctionInfo, functionBodyImpl) <= UCHAR_MAX); + return offsetof(FunctionInfo, functionBodyImpl); + } static DWORD GetAttributesOffset() { return offsetof(FunctionInfo, attributes); } void VerifyOriginalEntryPoint() const; @@ -62,6 +68,7 @@ namespace Js bool IsClassMethod() const { return ((this->attributes & ClassMethod) != 0); } bool IsModule() const { return ((this->attributes & Module) != 0); } bool HasSuperReference() const { return ((this->attributes & SuperReference) != 0); } + bool CanBeDeferred() const { return ((this->attributes & CanDefer) != 0); } static bool IsCoroutine(Attributes attributes) { return ((attributes & (Async | Generator)) != 0); } bool IsCoroutine() const { return IsCoroutine(this->attributes); } @@ -73,10 +80,14 @@ namespace Js { return functionBodyImpl; } + void SetFunctionProxy(FunctionProxy * proxy) + { + functionBodyImpl = proxy; + } ParseableFunctionInfo* GetParseableFunctionInfo() const { - Assert(functionBodyImpl == NULL || !IsDeferredDeserializeFunction()); - return (ParseableFunctionInfo*) functionBodyImpl; + Assert(functionBodyImpl == nullptr || !IsDeferredDeserializeFunction()); + return (ParseableFunctionInfo*)functionBodyImpl; } ParseableFunctionInfo** GetParseableFunctionInfoRef() const { @@ -85,19 +96,26 @@ namespace Js } DeferDeserializeFunctionInfo* GetDeferDeserializeFunctionInfo() const { - Assert(functionBodyImpl == NULL || IsDeferredDeserializeFunction()); + Assert(functionBodyImpl == nullptr || IsDeferredDeserializeFunction()); return (DeferDeserializeFunctionInfo*)functionBodyImpl; } FunctionBody * GetFunctionBody() const; Attributes GetAttributes() const { return attributes; } static Attributes GetAttributes(Js::RecyclableObject * function); - Js::LocalFunctionId GetLocalFunctionId() const { return functionId; } - virtual void Finalize(bool isShutdown) + void SetAttributes(Attributes attr) { attributes = attr; } + + LocalFunctionId GetLocalFunctionId() const { return functionId; } + void SetLocalFunctionId(LocalFunctionId functionId) { this->functionId = functionId; } + + uint GetCompileCount() const { return compileCount; } + void SetCompileCount(uint count) { compileCount = count; } + + virtual void Finalize(bool isShutdown) override { } - virtual void Dispose(bool isShutdown) + virtual void Dispose(bool isShutdown) override { } @@ -105,6 +123,10 @@ namespace Js BOOL IsDeferredDeserializeFunction() const { return ((this->attributes & DeferredDeserialize) == DeferredDeserialize); } BOOL IsDeferredParseFunction() const { return ((this->attributes & DeferredParse) == DeferredParse); } + void SetCapturesThis() { attributes = (Attributes)(attributes | Attributes::CapturesThis); } + bool GetCapturesThis() const { return (attributes & Attributes::CapturesThis) != 0; } + void SetEnclosedByGlobalFunc() { attributes = (Attributes)(attributes | Attributes::EnclosedByGlobalFunc ); } + bool GetEnclosedByGlobalFunc() const { return (attributes & Attributes::EnclosedByGlobalFunc) != 0; } protected: JavascriptMethod originalEntryPoint; @@ -112,6 +134,7 @@ namespace Js // However, proxies are not allocated as write barrier memory currently so its fine to not set the write barrier for this field FunctionProxy * functionBodyImpl; // Implementation of the function- null if the function doesn't have a body LocalFunctionId functionId; // Per host source context (source file) function Id + uint compileCount; Attributes attributes; }; diff --git a/lib/Runtime/Base/ScriptContext.cpp b/lib/Runtime/Base/ScriptContext.cpp index 08f1a661a08..fb5184ed0b3 100644 --- a/lib/Runtime/Base/ScriptContext.cpp +++ b/lib/Runtime/Base/ScriptContext.cpp @@ -1040,6 +1040,70 @@ namespace Js } #endif + void ScriptContext::RedeferFunctionBodies(ActiveFunctionSet *pActiveFuncs, uint inactiveThreshold) + { + Assert(!this->IsClosed()); + + if (!this->IsScriptContextInNonDebugMode()) + { + return; + } + + // For each active function, collect call counts, update inactive counts, and redefer if appropriate. + // In the redeferral case, we require 2 passes over the set of FunctionBody's. + // This is because a function inlined in a non-redeferred function cannot itself be redeferred. + // So we first need to close over the set of non-redeferrable functions, then go back and redefer + // the eligible candidates. + + auto fn = [&](FunctionBody *functionBody) { + bool exec = functionBody->InterpretedSinceCallCountCollection(); + functionBody->CollectInterpretedCounts(); + functionBody->MapEntryPoints([&](int index, FunctionEntryPointInfo *entryPointInfo) { + if (!entryPointInfo->IsCleanedUp() && entryPointInfo->ExecutedSinceCallCountCollection()) + { + exec = true; + } + entryPointInfo->CollectCallCounts(); + }); + if (exec) + { + functionBody->SetInactiveCount(0); + } + else + { + functionBody->IncrInactiveCount(inactiveThreshold); + } + + if (pActiveFuncs) + { + Assert(this->GetThreadContext()->DoRedeferFunctionBodies()); + bool doRedefer = functionBody->DoRedeferFunction(inactiveThreshold); + if (!doRedefer) + { + functionBody->UpdateActiveFunctionSet(pActiveFuncs); + } + } + }; + + this->MapFunction(fn); + + if (!pActiveFuncs) + { + return; + } + + auto fnRedefer = [&](FunctionBody * functionBody) { + Assert(pActiveFuncs); + if (!functionBody->IsActiveFunction(pActiveFuncs)) + { + Assert(functionBody->DoRedeferFunction(inactiveThreshold)); + functionBody->RedeferFunction(); + } + }; + + this->MapFunction(fnRedefer); + } + bool ScriptContext::DoUndeferGlobalFunctions() const { return CONFIG_FLAG(DeferTopLevelTillFirstCall) && !AutoSystemInfo::Data.IsLowMemoryProcess(); @@ -2161,7 +2225,7 @@ if (!sourceList) dict->Add(key, pFuncScript); } - bool ScriptContext::IsInNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo **ppFuncBody) + bool ScriptContext::IsInNewFunctionMap(EvalMapString const& key, FunctionInfo **ppFuncInfo) { if (this->cache->newFunctionCache == nullptr) { @@ -2169,7 +2233,7 @@ if (!sourceList) } // If eval map cleanup is false, to preserve existing behavior, add it to the eval map MRU list - bool success = this->cache->newFunctionCache->TryGetValue(key, ppFuncBody); + bool success = this->cache->newFunctionCache->TryGetValue(key, ppFuncInfo); if (success) { this->cache->newFunctionCache->NotifyAdd(key); @@ -2183,13 +2247,13 @@ if (!sourceList) return success; } - void ScriptContext::AddToNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo *pFuncBody) + void ScriptContext::AddToNewFunctionMap(EvalMapString const& key, FunctionInfo *pFuncInfo) { if (this->cache->newFunctionCache == nullptr) { this->cache->newFunctionCache = RecyclerNew(this->recycler, NewFunctionCache, this->recycler); } - this->cache->newFunctionCache->Add(key, pFuncBody); + this->cache->newFunctionCache->Add(key, pFuncInfo); } @@ -3225,6 +3289,8 @@ if (!sourceList) JavascriptMethod entryPoint = pFunction->GetEntryPoint(); FunctionInfo * info = pFunction->GetFunctionInfo(); FunctionProxy * proxy = info->GetFunctionProxy(); + +#if 0 if (proxy != info) { #ifdef ENABLE_SCRIPT_PROFILING @@ -3269,6 +3335,13 @@ if (!sourceList) return; } +#else + if (proxy == nullptr) + { + return; + } + Assert(proxy->GetFunctionInfo() == info); +#endif if (!proxy->IsFunctionBody()) { @@ -3371,27 +3444,6 @@ if (!sourceList) #endif OUTPUT_TRACE(Js::ScriptProfilerPhase, _u("\n")); - FunctionInfo * info = pFunction->GetFunctionInfo(); - if (proxy != info) - { - // The thunk can deal with moving to the function body -#ifdef ENABLE_SCRIPT_PROFILING - Assert(entryPoint == DefaultDeferredParsingThunk || entryPoint == ProfileDeferredParsingThunk - || entryPoint == DefaultDeferredDeserializeThunk || entryPoint == ProfileDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk || entryPoint == CrossSite::ProfileThunk); -#else - Assert(entryPoint == DefaultDeferredParsingThunk - || entryPoint == DefaultDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk); -#endif - - Assert(!proxy->IsDeferred()); - Assert(proxy->GetFunctionBody()->GetProfileSession() == proxy->GetScriptContext()->GetProfileSession()); - - return; - } - - #if ENABLE_NATIVE_CODEGEN if (!IsIntermediateCodeGenThunk(entryPoint) && entryPoint != DynamicProfileInfo::EnsureDynamicProfileInfoThunk) #endif diff --git a/lib/Runtime/Base/ScriptContext.h b/lib/Runtime/Base/ScriptContext.h index 95c2e9d8728..fa1510e724a 100644 --- a/lib/Runtime/Base/ScriptContext.h +++ b/lib/Runtime/Base/ScriptContext.h @@ -324,7 +324,7 @@ namespace Js typedef JsUtil::BaseDictionary SecondLevelEvalCache; typedef TwoLevelHashRecord EvalMapRecord; typedef JsUtil::Cache, FastEvalMapStringComparer> EvalCacheTopLevelDictionary; - typedef JsUtil::Cache> NewFunctionCache; + typedef JsUtil::Cache> NewFunctionCache; typedef JsUtil::BaseDictionary ParseableFunctionInfoMap; // This is the dictionary used by script context to cache the eval. typedef TwoLevelHashDictionary EvalCacheDictionary; @@ -421,6 +421,7 @@ namespace Js const ScriptContextBase* GetScriptContextBase() const { return static_cast(this); } + void RedeferFunctionBodies(ActiveFunctionSet *pActive, uint inactiveThreshold); bool DoUndeferGlobalFunctions() const; bool IsUndeclBlockVar(Var var) const { return this->javascriptLibrary->IsUndeclBlockVar(var); } @@ -1024,8 +1025,8 @@ namespace Js inline bool EnableEvalMapCleanup() { return CONFIG_FLAG(EnableEvalMapCleanup); }; uint GetNextSourceContextId(); - bool IsInNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo **ppFuncBody); - void AddToNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo *pFuncBody); + bool IsInNewFunctionMap(EvalMapString const& key, FunctionInfo **ppFuncInfo); + void AddToNewFunctionMap(EvalMapString const& key, FunctionInfo *pFuncInfo); SourceContextInfo * GetSourceContextInfo(DWORD_PTR hostSourceContext, IActiveScriptDataCache* profileDataCache); SourceContextInfo * GetSourceContextInfo(uint hash); diff --git a/lib/Runtime/Base/ThreadContext.cpp b/lib/Runtime/Base/ThreadContext.cpp index 44d8f7943a7..7be0567c310 100644 --- a/lib/Runtime/Base/ThreadContext.cpp +++ b/lib/Runtime/Base/ThreadContext.cpp @@ -187,6 +187,9 @@ ThreadContext::ThreadContext(AllocationPolicyManager * allocationPolicyManager, rootPendingClose(nullptr), isProfilingUserCode(true), loopDepth(0), + redeferralState(InitialRedeferralState), + gcSinceLastRedeferral(0), + gcSinceCallCountsCollected(0), tridentLoadAddress(nullptr), m_remoteThreadContextInfo(0), debugManager(nullptr) @@ -1721,6 +1724,16 @@ ThreadContext::ProbeStackNoDispose(size_t size, Js::ScriptContext *scriptContext this->CheckInterruptPoll(); } } + +#if DBG + if (PHASE_STRESS1(Js::RedeferralPhase)) + { + if (JsUtil::ExternalApi::IsScriptActiveOnCurrentThreadContext()) + { + this->TryRedeferral(); + } + } +#endif } void @@ -2520,6 +2533,7 @@ ThreadContext::PreCollectionCallBack(CollectionFlags flags) #ifdef PERF_COUNTERS PHASE_PRINT_TESTTRACE1(Js::DeferParsePhase, _u("TestTrace: deferparse - # of func: %d # deferparsed: %d\n"), PerfCounter::CodeCounterSet::GetTotalFunctionCounter().GetValue(), PerfCounter::CodeCounterSet::GetDeferredFunctionCounter().GetValue()); #endif + // This needs to be done before ClearInlineCaches since that method can empty the list of // script contexts with inline caches this->ClearScriptContextCaches(); @@ -2604,13 +2618,216 @@ ThreadContext::PostCollectionCallBack() // Recycler is null in the case where the ThreadContext is in the process of creating the recycler and // we have a GC triggered (say because the -recyclerStress flag is passed in) - if (this->recycler != NULL && this->recycler->InCacheCleanupCollection()) + if (this->recycler != NULL) { - this->recycler->ClearCacheCleanupCollection(); - for (Js::ScriptContext *scriptContext = scriptContextList; scriptContext; scriptContext = scriptContext->next) + if (this->recycler->InCacheCleanupCollection()) + { + this->recycler->ClearCacheCleanupCollection(); + for (Js::ScriptContext *scriptContext = scriptContextList; scriptContext; scriptContext = scriptContext->next) + { + scriptContext->CleanupWeakReferenceDictionaries(); + } + } + + if (this->DoTryRedeferral()) + { + HRESULT hr = S_OK; + BEGIN_TRANSLATE_OOM_TO_HRESULT + { + this->TryRedeferral(); + } + END_TRANSLATE_OOM_TO_HRESULT(hr); + } + + this->UpdateRedeferralState(); + } +} + +bool +ThreadContext::DoTryRedeferral() const +{ + if (PHASE_FORCE1(Js::RedeferralPhase) || PHASE_STRESS1(Js::RedeferralPhase)) + { + return true; + } + + if (!PHASE_ON1(Js::RedeferralPhase)) + { + return false; + } + + switch (this->redeferralState) + { + case InitialRedeferralState: + return false; + + case StartupRedeferralState: + return gcSinceCallCountsCollected >= StartupRedeferralInactiveThreshold; + + case MainRedeferralState: + return gcSinceCallCountsCollected >= MainRedeferralInactiveThreshold; + + default: + Assert(0); + return false; + }; +} + +bool +ThreadContext::DoRedeferFunctionBodies() const +{ + if (PHASE_FORCE1(Js::RedeferralPhase) || PHASE_STRESS1(Js::RedeferralPhase)) + { + return true; + } + + if (!PHASE_ON1(Js::RedeferralPhase)) + { + return false; + } + + switch (this->redeferralState) + { + case InitialRedeferralState: + return false; + + case StartupRedeferralState: + return gcSinceLastRedeferral >= StartupRedeferralCheckInterval; + + case MainRedeferralState: + return gcSinceLastRedeferral >= MainRedeferralCheckInterval; + + default: + Assert(0); + return false; + }; +} + +uint +ThreadContext::GetRedeferralCollectionInterval() const +{ + switch(this->redeferralState) + { + case InitialRedeferralState: + return InitialRedeferralDelay; + + case StartupRedeferralState: + return StartupRedeferralCheckInterval; + + case MainRedeferralState: + return MainRedeferralCheckInterval; + + default: + Assert(0); + return (uint)-1; + } +} + +uint +ThreadContext::GetRedeferralInactiveThreshold() const +{ + switch(this->redeferralState) + { + case InitialRedeferralState: + return InitialRedeferralDelay; + + case StartupRedeferralState: + return StartupRedeferralInactiveThreshold; + + case MainRedeferralState: + return MainRedeferralInactiveThreshold; + + default: + Assert(0); + return (uint)-1; + } +} + +void +ThreadContext::TryRedeferral() +{ + bool doRedefer = this->DoRedeferFunctionBodies(); + + // Collect the set of active functions. + ActiveFunctionSet *pActiveFuncs = nullptr; + if (doRedefer) + { + pActiveFuncs = Anew(this->GetThreadAlloc(), ActiveFunctionSet, this->GetThreadAlloc()); + this->GetActiveFunctions(pActiveFuncs); + } + + uint inactiveThreshold = this->GetRedeferralInactiveThreshold(); + Js::ScriptContext *scriptContext; + for (scriptContext = GetScriptContextList(); scriptContext; scriptContext = scriptContext->next) + { + if (scriptContext->IsClosed()) { - scriptContext->CleanupWeakReferenceDictionaries(); + continue; } + scriptContext->RedeferFunctionBodies(pActiveFuncs, inactiveThreshold); + } + + if (pActiveFuncs) + { + Adelete(this->GetThreadAlloc(), pActiveFuncs); + } +} + +void +ThreadContext::GetActiveFunctions(ActiveFunctionSet * pActiveFuncs) +{ + if (!this->IsInScript()) + { + return; + } + + Js::JavascriptStackWalker walker(GetScriptContextList(), TRUE, NULL, true); + Js::JavascriptFunction *function = nullptr; + while (walker.GetCallerWithoutInlinedFrames(&function)) + { + if (function->GetFunctionInfo()->HasBody()) + { + Js::FunctionBody *body = function->GetFunctionInfo()->GetFunctionBody(); + body->UpdateActiveFunctionSet(pActiveFuncs); + } + } +} + +void +ThreadContext::UpdateRedeferralState() +{ + uint inactiveThreshold = this->GetRedeferralInactiveThreshold(); + uint collectInterval = this->GetRedeferralCollectionInterval(); + + this->gcSinceCallCountsCollected++; + if (this->gcSinceCallCountsCollected >= inactiveThreshold) + { + this->gcSinceCallCountsCollected = 0; + } + + this->gcSinceLastRedeferral++; + if (this->gcSinceLastRedeferral >= collectInterval) + { + // Advance state + switch (this->redeferralState) + { + case InitialRedeferralState: + this->redeferralState = StartupRedeferralState; + break; + + case StartupRedeferralState: + this->redeferralState = MainRedeferralState; + break; + + case MainRedeferralState: + break; + + default: + Assert(0); + break; + } + + this->gcSinceLastRedeferral = 0; } } diff --git a/lib/Runtime/Base/ThreadContext.h b/lib/Runtime/Base/ThreadContext.h index 98fee62cea6..13158975864 100644 --- a/lib/Runtime/Base/ThreadContext.h +++ b/lib/Runtime/Base/ThreadContext.h @@ -14,6 +14,8 @@ namespace Js typedef JsUtil::List ReturnedValueList; } +typedef BVSparse ActiveFunctionSet; + using namespace PlatformAgnostic; struct IAuthorFileContext; @@ -650,6 +652,22 @@ class ThreadContext sealed : uint functionCount; uint sourceInfoCount; + enum RedeferralState + { + InitialRedeferralState, + StartupRedeferralState, + MainRedeferralState + }; + RedeferralState redeferralState; + uint gcSinceLastRedeferral; + uint gcSinceCallCountsCollected; + + static const uint InitialRedeferralDelay = 5; + static const uint StartupRedeferralCheckInterval = 10; + static const uint StartupRedeferralInactiveThreshold = 5; + static const uint MainRedeferralCheckInterval = 20; + static const uint MainRedeferralInactiveThreshold = 10; + Js::TypeId nextTypeId; uint32 polymorphicCacheState; @@ -1136,6 +1154,14 @@ class ThreadContext sealed : static size_t GetProcessCodeSize() { return processNativeCodeSize; } size_t GetSourceSize() { return sourceCodeSize; } + bool DoTryRedeferral() const; + void TryRedeferral(); + bool DoRedeferFunctionBodies() const; + void UpdateRedeferralState(); + uint GetRedeferralCollectionInterval() const; + uint GetRedeferralInactiveThreshold() const; + void GetActiveFunctions(ActiveFunctionSet * pActive); + Js::ScriptEntryExitRecord * GetScriptEntryExit() const { return entryExitRecord; } void RegisterCodeGenRecyclableData(Js::CodeGenRecyclableData *const codeGenRecyclableData); void UnregisterCodeGenRecyclableData(Js::CodeGenRecyclableData *const codeGenRecyclableData); diff --git a/lib/Runtime/ByteCode/ByteCodeDumper.cpp b/lib/Runtime/ByteCode/ByteCodeDumper.cpp index d2315e6487a..926cc04109c 100644 --- a/lib/Runtime/ByteCode/ByteCodeDumper.cpp +++ b/lib/Runtime/ByteCode/ByteCodeDumper.cpp @@ -21,7 +21,7 @@ namespace Js ByteCodeDumper::Dump(dumpFunction); for (uint i = 0; i < dumpFunction->GetNestedCount(); i ++) { - dumpFunction->GetNestedFunc(i)->EnsureDeserialized(); + dumpFunction->GetNestedFunctionForExecution(i); ByteCodeDumper::DumpRecursively(dumpFunction->GetNestedFunc(i)->GetFunctionBody()); } } @@ -822,7 +822,7 @@ namespace Js case OpCode::NewInnerScFunc: case OpCode::NewInnerScGenFunc: { - FunctionProxy* pfuncActual = dumpFunction->GetNestedFunc((uint)data->SlotIndex)->GetFunctionProxy(); + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); Output::Print(_u(" R%d = env:R%d, %s()"), data->Value, data->Instance, pfuncActual->EnsureDeserialized()->GetDisplayName()); break; @@ -872,7 +872,7 @@ namespace Js case OpCode::NewStackScFunc: case OpCode::NewScGenFunc: { - FunctionProxy* pfuncActual = dumpFunction->GetNestedFunc((uint)data->SlotIndex)->GetFunctionProxy(); + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); Output::Print(_u(" R%d = %s()"), data->Value, pfuncActual->EnsureDeserialized()->GetDisplayName()); break; diff --git a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp index 4c4407880fe..b04aae6a399 100644 --- a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp +++ b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp @@ -2998,6 +2998,12 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) // so they have pointers to the stub sub-trees they need.) byteCodeFunction->SetDeferredStubs(nullptr); + if (byteCodeFunction->GetByteCode() != nullptr) + { + // Previously compiled function nested within a re-deferred and re-compiled function. + return; + } + try { // Bug : 301517 @@ -3225,10 +3231,10 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) uint nestedCount = byteCodeFunction->GetNestedCount(); for (uint i = 0; i < nestedCount; i++) { - Js::FunctionProxy * nested = byteCodeFunction->GetNestedFunc(i); + Js::FunctionProxy * nested = byteCodeFunction->GetNestedFunctionProxy(i); if (nested->IsFunctionBody()) { - nested->GetFunctionBody()->SetStackNestedFuncParent(byteCodeFunction); + nested->GetFunctionBody()->SetStackNestedFuncParent(byteCodeFunction->GetFunctionInfo()); } } } @@ -3462,6 +3468,7 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) byteCodeFunction->SetInitialDefaultEntryPoint(); + byteCodeFunction->SetCompileCount(UInt32Math::Add(byteCodeFunction->GetCompileCount(), 1)); #ifdef ENABLE_DEBUG_CONFIG_OPTIONS if (byteCodeFunction->IsInDebugMode() != scriptContext->IsScriptContextInDebugMode()) // debug mode mismatch diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp index 57e019f18e3..7d75199d176 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp @@ -967,7 +967,7 @@ Js::RegSlot ByteCodeGenerator::EnregisterStringTemplateCallsiteConstant(ParseNod // // Restore all outer func scope info when reparsing a deferred func. // -void ByteCodeGenerator::RestoreScopeInfo(Js::FunctionBody* functionBody) +void ByteCodeGenerator::RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody) { if (functionBody && functionBody->GetScopeInfo()) { @@ -1040,7 +1040,7 @@ void ByteCodeGenerator::RestoreScopeInfo(Js::FunctionBody* functionBody) FuncInfo * ByteCodeGenerator::StartBindGlobalStatements(ParseNode *pnode) { - if (parentScopeInfo) + if (parentScopeInfo && parentScopeInfo->GetParent() && (!parentScopeInfo->GetParent()->GetIsGlobalFunc() || parentScopeInfo->GetParent()->IsEval())) { Assert(CONFIG_FLAG(DeferNested)); trackEnvDepth = true; @@ -1163,7 +1163,7 @@ ParseNode* VisitBlock(ParseNode *pnode, ByteCodeGenerator* byteCodeGenerator, Pr return pnodeLastVal; } -FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode) +FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode, Js::ParseableFunctionInfo * reuseNestedFunc) { bool funcExprWithName; union @@ -1193,6 +1193,11 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen Assert(!parsedFunctionBody->IsDeferredParseFunction() || parsedFunctionBody->IsReparsed()); pnode->sxFnc.SetDeclaration(parsedFunctionBody->GetIsDeclaration()); + if (!pnode->sxFnc.CanBeDeferred()) + { + parsedFunctionBody->SetAttributes( + (Js::FunctionInfo::Attributes)(parsedFunctionBody->GetAttributes() & ~Js::FunctionInfo::Attributes::CanDefer)); + } funcExprWithName = !(parsedFunctionBody->GetIsDeclaration() || pnode->sxFnc.IsMethod()) && pnode->sxFnc.pnodeName != nullptr && @@ -1211,8 +1216,7 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen Js::ParseableFunctionInfo *parent = parsedFunctionBody->GetScopeInfo()->GetParent(); if (parent) { - Assert(parent->GetFunctionBody()); - if (parent->GetFunctionBody()->GetHasOrParentHasArguments()) + if (parent->GetHasOrParentHasArguments()) { parsedFunctionBody->SetHasOrParentHasArguments(true); } @@ -1267,22 +1271,34 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen if (pnode->sxFnc.IsModule()) { attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::Module); + } + if (pnode->sxFnc.CanBeDeferred()) + { + attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::CanDefer); } if (createFunctionBody) { ENTER_PINNED_SCOPE(Js::PropertyRecordList, propertyRecordList); propertyRecordList = EnsurePropertyRecordList(); - parsedFunctionBody = Js::FunctionBody::NewFromRecycler(scriptContext, name, nameLength, shortNameOffset, pnode->sxFnc.nestedCount, m_utf8SourceInfo, - m_utf8SourceInfo->GetSrcInfo()->sourceContextInfo->sourceContextId, functionId, propertyRecordList - , attributes - , pnode->sxFnc.IsClassConstructor() ? - Js::FunctionBody::FunctionBodyFlags::Flags_None : - Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue + if (reuseNestedFunc) + { + Assert(reuseNestedFunc->IsFunctionBody()); + parsedFunctionBody = reuseNestedFunc->GetFunctionBody(); + } + else + { + parsedFunctionBody = Js::FunctionBody::NewFromRecycler(scriptContext, name, nameLength, shortNameOffset, pnode->sxFnc.nestedCount, m_utf8SourceInfo, + m_utf8SourceInfo->GetSrcInfo()->sourceContextInfo->sourceContextId, functionId, propertyRecordList + , attributes + , pnode->sxFnc.IsClassConstructor() ? + Js::FunctionBody::FunctionBodyFlags::Flags_None : + Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue #ifdef PERF_COUNTERS - , false /* is function from deferred deserialized proxy */ + , false /* is function from deferred deserialized proxy */ #endif - ); + ); + } LEAVE_PINNED_SCOPE(); } else @@ -1295,7 +1311,17 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen propertyRecordList = EnsurePropertyRecordList(); } - parseableFunctionInfo = Js::ParseableFunctionInfo::New(scriptContext, pnode->sxFnc.nestedCount, functionId, m_utf8SourceInfo, name, nameLength, shortNameOffset, propertyRecordList, attributes); + if (reuseNestedFunc) + { + parseableFunctionInfo = reuseNestedFunc; + } + else + { + parseableFunctionInfo = Js::ParseableFunctionInfo::New(scriptContext, pnode->sxFnc.nestedCount, functionId, m_utf8SourceInfo, name, nameLength, shortNameOffset, propertyRecordList, attributes, + pnode->sxFnc.IsClassConstructor() ? + Js::FunctionBody::FunctionBodyFlags::Flags_None : + Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue); + } LEAVE_PINNED_SCOPE(); } @@ -1893,7 +1919,7 @@ void ByteCodeGenerator::Generate(__in ParseNode *pnode, uint32 grfscr, __in Byte void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() { - if (!this->parentScopeInfo) + if (!this->parentScopeInfo || (this->parentScopeInfo->GetParent() && this->parentScopeInfo->GetParent()->GetIsGlobalFunc())) { return; } @@ -1921,15 +1947,14 @@ void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() else { // We have to wait until it is parsed before we populate the stack nested func parent. - Js::FunctionBody * parentFunctionBody = nullptr; FuncInfo * parentFunc = top->GetBodyScope()->GetEnclosingFunc(); if (!parentFunc->IsGlobalFunction()) { - parentFunctionBody = parentFunc->GetParsedFunctionBody(); - Assert(parentFunctionBody != rootFuncBody); - if (parentFunctionBody->DoStackNestedFunc()) + Assert(parentFunc->byteCodeFunction != rootFuncBody); + Js::ParseableFunctionInfo * parentFunctionInfo = parentFunc->byteCodeFunction; + if (parentFunctionInfo->DoStackNestedFunc()) { - rootFuncBody->SetStackNestedFuncParent(parentFunctionBody); + rootFuncBody->SetStackNestedFuncParent(parentFunctionInfo->GetFunctionInfo()); } } } @@ -1938,12 +1963,17 @@ void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() { FuncInfo * funcInfo = i.Data(); Assert(funcInfo->IsRestored()); - Js::FunctionBody * functionBody = funcInfo->GetParsedFunctionBody(); - bool didStackNestedFunc = functionBody->DoStackNestedFunc(); + Js::ParseableFunctionInfo * parseableFunctionInfo = funcInfo->byteCodeFunction; + bool didStackNestedFunc = parseableFunctionInfo->DoStackNestedFunc(); if (!didStackNestedFunc) { return; } + if (!parseableFunctionInfo->IsFunctionBody()) + { + continue; + } + Js::FunctionBody * functionBody = funcInfo->GetParsedFunctionBody(); if (funcInfo->HasMaybeEscapedNestedFunc()) { // This should box the rest of the parent functions. @@ -2249,7 +2279,7 @@ void VisitFncDecls(ParseNode *fns, Fn action) } } -FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator) +FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, Js::ParseableFunctionInfo *reuseNestedFunc) { // Do binding of function name(s), initialize function scope, propagate function-wide properties from // the parent (if any). @@ -2303,7 +2333,7 @@ FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerato } Assert(pnode->sxFnc.funcInfo == nullptr); - FuncInfo* funcInfo = pnode->sxFnc.funcInfo = byteCodeGenerator->StartBindFunction(funcName, funcNameLength, functionNameOffset, &funcExprWithName, pnode); + FuncInfo* funcInfo = pnode->sxFnc.funcInfo = byteCodeGenerator->StartBindFunction(funcName, funcNameLength, functionNameOffset, &funcExprWithName, pnode, reuseNestedFunc); funcInfo->byteCodeFunction->SetIsNamedFunctionExpression(funcExprWithName); funcInfo->byteCodeFunction->SetIsNameIdentifierRef(pnode->sxFnc.isNameIdentifierRef); if (fIsRoot) @@ -3119,7 +3149,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo // If the current function is not parsed yet, its function body is not generated yet. // Reset pCurrentFunction to null so that it will not be able re-use anything. - Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunc((*pIndex)); + Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunctionProxy((*pIndex)); if (proxy && proxy->IsFunctionBody()) { byteCodeGenerator->pCurrentFunction = proxy->GetFunctionBody(); @@ -3136,7 +3166,19 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo byteCodeGenerator->pCurrentFunction = nullptr; } } - PreVisitFunction(pnodeScope, byteCodeGenerator); + + Js::ParseableFunctionInfo::NestedArray * parentNestedArray = parentFunc->GetNestedArray(); + Js::ParseableFunctionInfo* reuseNestedFunc = nullptr; + if (parentNestedArray && byteCodeGenerator->GetScriptContext()->IsScriptContextInNonDebugMode()) + { + Assert(*pIndex < parentNestedArray->nestedCount); + Js::FunctionInfo * info = parentNestedArray->functionInfoArray[*pIndex]; + if (info) + { + reuseNestedFunc = info->GetParseableFunctionInfo(); + } + } + PreVisitFunction(pnodeScope, byteCodeGenerator, reuseNestedFunc); FuncInfo *funcInfo = pnodeScope->sxFnc.funcInfo; parentFuncInfo->OnStartVisitFunction(pnodeScope); @@ -3148,7 +3190,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo // Patch current non-parsed function's FunctionBodyImpl with the new generated function body. // So that the function object (pointing to the old function body) can able to get to the new one. - Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunc((*pIndex)); + Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunctionProxy((*pIndex)); if (proxy && !proxy->IsFunctionBody()) { proxy->UpdateFunctionBodyImpl(funcInfo->byteCodeFunction->GetFunctionBody()); @@ -3224,14 +3266,6 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo EndVisitBlock(pnodeScope->sxFnc.pnodeBodyScope, byteCodeGenerator); EndVisitBlock(pnodeScope->sxFnc.pnodeScopes, byteCodeGenerator); } - else if (pnodeScope->sxFnc.nestedCount) - { - // The nested function is deferred but has its own nested functions. - // Make sure we at least zero-initialize its array in case, for instance, we get cloned - // before the function is called and the array filled in. - - memset(funcInfo->byteCodeFunction->GetNestedFuncArray(), 0, pnodeScope->sxFnc.nestedCount * sizeof(Js::FunctionBody*)); - } if (!pnodeScope->sxFnc.pnodeBody) { @@ -3243,7 +3277,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo if (!parentFuncInfo->IsFakeGlobalFunction(byteCodeGenerator->GetFlags())) { pnodeScope->sxFnc.nestedIndex = *pIndex; - parentFunc->SetNestedFunc(funcInfo->byteCodeFunction, (*pIndex)++, byteCodeGenerator->GetFlags()); + parentFunc->SetNestedFunc(funcInfo->byteCodeFunction->GetFunctionInfo(), (*pIndex)++, byteCodeGenerator->GetFlags()); } Assert(parentFunc); diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.h b/lib/Runtime/ByteCode/ByteCodeGenerator.h index 2126386138d..913f0073222 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.h +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.h @@ -207,7 +207,7 @@ class ByteCodeGenerator return protoReg; } - void RestoreScopeInfo(Js::FunctionBody* funcInfo); + void RestoreScopeInfo(Js::ParseableFunctionInfo* funcInfo); FuncInfo *StartBindGlobalStatements(ParseNode *pnode); void AssignPropertyId(Symbol *sym, Js::ParseableFunctionInfo* functionInfo); void AssignPropertyId(IdentPtr pid); @@ -224,7 +224,7 @@ class ByteCodeGenerator void AssignPropertyIds(Js::ParseableFunctionInfo* functionInfo); void MapCacheIdsToPropertyIds(FuncInfo *funcInfo); void MapReferencedPropertyIds(FuncInfo *funcInfo); - FuncInfo *StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode); + FuncInfo *StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode, Js::ParseableFunctionInfo * reuseNestedFunc); void EndBindFunction(bool funcExprWithName); void StartBindCatch(ParseNode *pnode); diff --git a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp index ff7ceb3e5d1..5776c815a92 100644 --- a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp +++ b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp @@ -2001,7 +2001,7 @@ class ByteCodeBufferBuilder ; PrependInt32(builder, _u("BitFlags"), bitFlags); - PrependInt32(builder, _u("Relative Function ID"), function->functionId - topFunctionId); // Serialized function ids are relative to the top function ID + PrependInt32(builder, _u("Relative Function ID"), function->GetLocalFunctionId() - topFunctionId); // Serialized function ids are relative to the top function ID PrependInt32(builder, _u("Attributes"), function->GetAttributes()); AssertMsg((function->GetAttributes() & ~(FunctionInfo::Attributes::ErrorOnNew @@ -2193,7 +2193,7 @@ class ByteCodeBufferBuilder HRESULT AddTopFunctionBody(FunctionBody * function, SRCINFO const * srcInfo) { - topFunctionId = function->functionId; + topFunctionId = function->GetLocalFunctionId(); return AddFunctionBody(functionsTable, function, srcInfo); } @@ -3581,7 +3581,8 @@ class ByteCodeBufferReader } else { - *function = ParseableFunctionInfo::New(this->scriptContext, nestedCount, firstFunctionId + functionId, utf8SourceInfo, displayName, displayNameLength, displayShortNameOffset, nullptr, (FunctionInfo::Attributes)attributes); + *function = ParseableFunctionInfo::New(this->scriptContext, nestedCount, firstFunctionId + functionId, utf8SourceInfo, displayName, displayNameLength, displayShortNameOffset, nullptr, (FunctionInfo::Attributes)attributes, + Js::FunctionBody::FunctionBodyFlags::Flags_None); } // These fields are manually deserialized previously @@ -3797,7 +3798,7 @@ class ByteCodeBufferReader return hr; } - (*function)->SetNestedFunc(nestedFunction, i, 0u); + (*function)->SetNestedFunc(nestedFunction->GetFunctionInfo(), i, 0u); } } } diff --git a/lib/Runtime/ByteCode/FuncInfo.h b/lib/Runtime/ByteCode/FuncInfo.h index 7138586ee01..f9af3d79d69 100644 --- a/lib/Runtime/ByteCode/FuncInfo.h +++ b/lib/Runtime/ByteCode/FuncInfo.h @@ -430,7 +430,7 @@ class FuncInfo Js::FunctionBody* GetParsedFunctionBody() const { AssertMsg(this->byteCodeFunction->IsFunctionParsed(), "Function must be parsed in order to call this method"); - Assert(!IsDeferred()); + Assert(!IsDeferred() || this->byteCodeFunction->GetFunctionBody()->GetByteCode() != nullptr); return this->byteCodeFunction->GetFunctionBody(); } diff --git a/lib/Runtime/ByteCode/ScopeInfo.cpp b/lib/Runtime/ByteCode/ScopeInfo.cpp index a3802e3edf2..27909aa0bd1 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.cpp +++ b/lib/Runtime/ByteCode/ScopeInfo.cpp @@ -48,7 +48,7 @@ namespace Js ScopeInfo* ScopeInfo::FromParent(FunctionBody* parent) { return RecyclerNew(parent->GetScriptContext()->GetRecycler(), // Alloc with ParseableFunctionInfo - ScopeInfo, parent, 0); + ScopeInfo, parent->GetFunctionInfo(), 0); } inline void AddSlotCount(int& count, int addCount) @@ -62,7 +62,7 @@ namespace Js // // Create scope info for an outer scope. // - ScopeInfo* ScopeInfo::FromScope(ByteCodeGenerator* byteCodeGenerator, FunctionBody* parent, Scope* scope, ScriptContext *scriptContext) + ScopeInfo* ScopeInfo::FromScope(ByteCodeGenerator* byteCodeGenerator, ParseableFunctionInfo* parent, Scope* scope, ScriptContext *scriptContext) { int count = scope->Count(); @@ -74,7 +74,7 @@ namespace Js ScopeInfo* scopeInfo = RecyclerNewPlusZ(scriptContext->GetRecycler(), count * sizeof(SymbolInfo), - ScopeInfo, parent, count); + ScopeInfo, parent ? parent->GetFunctionInfo() : nullptr, count); scopeInfo->isDynamic = scope->GetIsDynamic(); scopeInfo->isObject = scope->GetIsObject(); scopeInfo->mustInstantiate = scope->GetMustInstantiate(); @@ -130,7 +130,9 @@ namespace Js TRACE_BYTECODE(_u("\nSave ScopeInfo: %s parent: %s\n\n"), funcBody->GetDisplayName(), parent->GetDisplayName()); - funcBody->SetScopeInfo(FromParent(parent)); + ScopeInfo *info = FromParent(parent); + info->parentOnly = true; + funcBody->SetScopeInfo(info); } // @@ -146,9 +148,9 @@ namespace Js // If we are reparsing a deferred function, we already have correct "parent" info in // funcBody->scopeInfo. parentFunc is the knopProg shell and should not be used in this // case. We should use existing parent if available. - FunctionBody * parent = funcBody->GetScopeInfo() ? + ParseableFunctionInfo * parent = funcBody->GetScopeInfo() ? funcBody->GetScopeInfo()->GetParent() : - parentFunc ? parentFunc->byteCodeFunction->GetFunctionBody() : nullptr; + parentFunc ? parentFunc->byteCodeFunction : nullptr; ScopeInfo* funcExprScopeInfo = nullptr; Scope* funcExprScope = func->GetFuncExprScope(); @@ -181,6 +183,14 @@ namespace Js // We will have to implement encoding block scope info to enable, which will also // enable defer parsing function that are in block scopes. + if (funcInfo->byteCodeFunction && + funcInfo->byteCodeFunction->GetScopeInfo() != nullptr && + !funcInfo->byteCodeFunction->GetScopeInfo()->IsParentInfoOnly()) + { + // No need to regenerate scope info if we re-compile an enclosing function + return; + } + Scope* currentScope = byteCodeGenerator->GetCurrentScope(); Assert(currentScope == funcInfo->GetBodyScope()); if (funcInfo->IsDeferred()) diff --git a/lib/Runtime/ByteCode/ScopeInfo.h b/lib/Runtime/ByteCode/ScopeInfo.h index bce1cdffda2..e71cf106e7c 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.h +++ b/lib/Runtime/ByteCode/ScopeInfo.h @@ -34,7 +34,7 @@ namespace Js { }; private: - FunctionBody * const parent; // link to parent function body + FunctionInfo * const parent; // link to parent function ScopeInfo* funcExprScopeInfo; // optional func expr scope info ScopeInfo* paramScopeInfo; // optional param scope info @@ -46,6 +46,7 @@ namespace Js { BYTE areNamesCached : 1; BYTE canMergeWithBodyScope : 1; BYTE hasLocalInClosure : 1; + BYTE parentOnly : 1; Scope *scope; int scopeId; @@ -53,11 +54,13 @@ namespace Js { SymbolInfo symbols[]; // symbol PropertyIDs, index == sym.scopeSlot private: - ScopeInfo(FunctionBody * parent, int symbolCount) - : parent(parent), funcExprScopeInfo(nullptr), paramScopeInfo(nullptr), symbolCount(symbolCount), scope(nullptr), areNamesCached(false), canMergeWithBodyScope(true), hasLocalInClosure(false) + ScopeInfo(FunctionInfo * parent, int symbolCount) + : parent(parent), funcExprScopeInfo(nullptr), paramScopeInfo(nullptr), symbolCount(symbolCount), scope(nullptr), areNamesCached(false), canMergeWithBodyScope(true), hasLocalInClosure(false), parentOnly(false) { } + bool IsParentInfoOnly() const { return parentOnly; } + void SetFuncExprScopeInfo(ScopeInfo* funcExprScopeInfo) { this->funcExprScopeInfo = funcExprScopeInfo; @@ -177,19 +180,19 @@ namespace Js { void SaveSymbolInfo(Symbol* sym, MapSymbolData* mapSymbolData); static ScopeInfo* FromParent(FunctionBody* parent); - static ScopeInfo* FromScope(ByteCodeGenerator* byteCodeGenerator, FunctionBody* parent, Scope* scope, ScriptContext *scriptContext); + static ScopeInfo* FromScope(ByteCodeGenerator* byteCodeGenerator, ParseableFunctionInfo* parent, Scope* scope, ScriptContext *scriptContext); static void SaveParentScopeInfo(FuncInfo* parentFunc, FuncInfo* func); static void SaveScopeInfo(ByteCodeGenerator* byteCodeGenerator, FuncInfo* parentFunc, FuncInfo* func); public: - FunctionBody * GetParent() const + ParseableFunctionInfo * GetParent() const { - return parent; + return parent ? parent->GetParseableFunctionInfo() : nullptr; } ScopeInfo* GetParentScopeInfo() const { - return parent->GetScopeInfo(); + return parent ? parent->GetParseableFunctionInfo()->GetScopeInfo() : nullptr; } ScopeInfo* GetFuncExprScopeInfo() const diff --git a/lib/Runtime/Debug/TTEvents.cpp b/lib/Runtime/Debug/TTEvents.cpp index 6e217595623..dfd01612bc7 100644 --- a/lib/Runtime/Debug/TTEvents.cpp +++ b/lib/Runtime/Debug/TTEvents.cpp @@ -273,7 +273,7 @@ namespace TTD { for(uint32 i = 0; i < resBody->GetNestedCount(); ++i) { - Js::ParseableFunctionInfo* ipfi = resBody->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* ipfi = resBody->GetNestedFunctionForExecution(i); Js::FunctionBody* ifb = JsSupport::ForceAndGetFunctionBody(ipfi); if(this->m_functionLine == ifb->GetLineNumber() && this->m_functionColumn == ifb->GetColumnNumber()) @@ -288,7 +288,7 @@ namespace TTD uint32 endColumn = UINT32_MAX; if(i + 1 < resBody->GetNestedCount()) { - Js::ParseableFunctionInfo* ipfinext = resBody->GetNestedFunc(i + 1)->EnsureDeserialized(); + Js::ParseableFunctionInfo* ipfinext = resBody->GetNestedFunctionForExecution(i + 1); Js::FunctionBody* ifbnext = JsSupport::ForceAndGetFunctionBody(ipfinext); endLine = ifbnext->GetLineNumber(); diff --git a/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp b/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp index d10e4408a96..2bc84be43bc 100644 --- a/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp +++ b/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp @@ -233,7 +233,7 @@ namespace TTD for(uint32 i = 0; i < body->GetNestedCount(); ++i) { - Js::ParseableFunctionInfo* pfiMid = body->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* pfiMid = body->GetNestedFunctionForExecution(i); Js::FunctionBody* currfb = TTD::JsSupport::ForceAndGetFunctionBody(pfiMid); this->ProcessFunctionBodyOnLoad(currfb, body); diff --git a/lib/Runtime/Debug/TTSnapValues.cpp b/lib/Runtime/Debug/TTSnapValues.cpp index 1d58d58ecf8..146cf98e048 100644 --- a/lib/Runtime/Debug/TTSnapValues.cpp +++ b/lib/Runtime/Debug/TTSnapValues.cpp @@ -1289,7 +1289,7 @@ namespace TTD functionInfo->SetGrfscr(functionInfo->GetGrfscr() | fscrGlobalCode); Js::EvalMapString key(source, length, moduleID, strictMode, /* isLibraryCode = */ false); - ctx->AddToNewFunctionMap(key, functionInfo); + ctx->AddToNewFunctionMap(key, functionInfo->GetFunctionInfo()); Js::FunctionBody* fb = JsSupport::ForceAndGetFunctionBody(pfuncScript->GetParseableFunctionInfo()); @@ -1455,7 +1455,7 @@ namespace TTD uint32 blength = parentBody->GetNestedCount(); for(uint32 i = 0; i < blength; ++i) { - Js::ParseableFunctionInfo* pfi = parentBody->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* pfi = parentBody->GetNestedFunctionForExecution(i); Js::FunctionBody* currfb = JsSupport::ForceAndGetFunctionBody(pfi); if(fbInfo->OptLine == currfb->GetLineNumber() && fbInfo->OptColumn == currfb->GetColumnNumber()) diff --git a/lib/Runtime/Language/AsmJsModule.cpp b/lib/Runtime/Language/AsmJsModule.cpp index 3283247cccc..ccc2fa2b8c2 100644 --- a/lib/Runtime/Language/AsmJsModule.cpp +++ b/lib/Runtime/Language/AsmJsModule.cpp @@ -621,6 +621,7 @@ namespace Js CompileScriptException se; funcBody = deferParseFunction->ParseAsmJs(&ps, &se, &parseTree); + fncNode->sxFnc.funcInfo->byteCodeFunction = funcBody; TRACE_BYTECODE(_u("\nDeferred parse %s\n"), funcBody->GetDisplayName()); if (parseTree && parseTree->nop == knopProg) @@ -637,7 +638,6 @@ namespace Js } } GetByteCodeGenerator()->PushFuncInfo(_u("Start asm.js AST prepass"), fncNode->sxFnc.funcInfo); - fncNode->sxFnc.funcInfo->byteCodeFunction->SetBoundPropertyRecords(GetByteCodeGenerator()->EnsurePropertyRecordList()); BindArguments(fncNode->sxFnc.pnodeParams); ASTPrepass(pnodeBody, func); GetByteCodeGenerator()->PopFuncInfo(_u("End asm.js AST prepass")); diff --git a/lib/Runtime/Language/DynamicProfileInfo.cpp b/lib/Runtime/Language/DynamicProfileInfo.cpp index c7c6c224262..cc0bf093b58 100644 --- a/lib/Runtime/Language/DynamicProfileInfo.cpp +++ b/lib/Runtime/Language/DynamicProfileInfo.cpp @@ -413,7 +413,7 @@ namespace Js } // Mark the callsite bit where caller and callee is same function - if (functionBody == calleeFunctionInfo && callSiteId < 32) + if (calleeFunctionInfo && functionBody == calleeFunctionInfo->GetFunctionProxy() && callSiteId < 32) { this->m_recursiveInlineInfo = this->m_recursiveInlineInfo | (1 << callSiteId); } @@ -770,7 +770,8 @@ namespace Js if (sourceId == CurrentSourceId) // caller and callee in same file { - return functionBody->GetUtf8SourceInfo()->FindFunction(functionId); + FunctionProxy *inlineeProxy = functionBody->GetUtf8SourceInfo()->FindFunction(functionId); + return inlineeProxy ? inlineeProxy->GetFunctionInfo() : nullptr; } if (sourceId != NoSourceId && sourceId != InvalidSourceId) @@ -784,7 +785,8 @@ namespace Js Utf8SourceInfo *srcInfo = sourceList->Item(i)->Get(); if (srcInfo && srcInfo->GetHostSourceContext() == sourceId) { - return srcInfo->FindFunction(functionId); + FunctionProxy *inlineeProxy = srcInfo->FindFunction(functionId); + return inlineeProxy ? inlineeProxy->GetFunctionInfo() : nullptr; } } } diff --git a/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp b/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp index 960dd124e90..3c80ab045c1 100644 --- a/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp +++ b/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp @@ -33,7 +33,8 @@ namespace Js FunctionBody *FunctionCodeGenJitTimeData::GetFunctionBody() const { - return this->functionInfo->GetFunctionBody(); + FunctionProxy *proxy = this->functionInfo->GetFunctionProxy(); + return proxy && proxy->IsFunctionBody() ? proxy->GetFunctionBody() : nullptr; } Var FunctionCodeGenJitTimeData::GetGlobalThisObject() const diff --git a/lib/Runtime/Language/FunctionCodeGenJitTimeData.h b/lib/Runtime/Language/FunctionCodeGenJitTimeData.h index c8dd797de2f..e9ae6636597 100644 --- a/lib/Runtime/Language/FunctionCodeGenJitTimeData.h +++ b/lib/Runtime/Language/FunctionCodeGenJitTimeData.h @@ -117,7 +117,7 @@ namespace Js bool IsPolymorphicCallSite(const ProfileId profiledCallSiteId) const; // This function walks all the chained jittimedata and returns the one which match the functionInfo. // This can return null, if the functionInfo doesn't match. - const FunctionCodeGenJitTimeData *GetJitTimeDataFromFunctionInfo(FunctionInfo *polyFunctionInfo) const; + const FunctionCodeGenJitTimeData *GetJitTimeDataFromFunctionInfo(FunctionInfo *polyFunctioInfoy) const; uint GetGlobalObjTypeSpecFldInfoCount() const { return this->globalObjTypeSpecFldInfoCount; } ObjTypeSpecFldInfo** GetGlobalObjTypeSpecFldInfoArray() const {return this->globalObjTypeSpecFldInfoArray; } diff --git a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp index fe4a2770365..543efbe7532 100644 --- a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp +++ b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp @@ -124,7 +124,8 @@ namespace Js const FunctionCodeGenRuntimeData *FunctionCodeGenRuntimeData::GetRuntimeDataFromFunctionInfo(FunctionInfo *polyFunctionInfo) const { const FunctionCodeGenRuntimeData *next = this; - while (next && next->functionBody != polyFunctionInfo) + FunctionProxy *polyFunctionProxy = polyFunctionInfo->GetFunctionProxy(); + while (next && next->functionBody != polyFunctionProxy) { next = next->next; } diff --git a/lib/Runtime/Language/InlineCache.h b/lib/Runtime/Language/InlineCache.h index 87ab87663ec..5c3261aee68 100644 --- a/lib/Runtime/Language/InlineCache.h +++ b/lib/Runtime/Language/InlineCache.h @@ -969,6 +969,7 @@ namespace Js bool IsEmpty() const { return type == nullptr; } bool TryGetResult(Var instance, JavascriptFunction * function, JavascriptBoolean ** result); void Cache(Type * instanceType, JavascriptFunction * function, JavascriptBoolean * result, ScriptContext * scriptContext); + void Unregister(ScriptContext * scriptContext); static uint32 OffsetOfFunction(); static uint32 OffsetOfResult(); @@ -977,7 +978,6 @@ namespace Js private: void Set(Type * instanceType, JavascriptFunction * function, JavascriptBoolean * result); void Clear(); - void Unregister(ScriptContext * scriptContext); }; // Two-entry Type-indexed circular cache diff --git a/lib/Runtime/Language/InterpreterStackFrame.cpp b/lib/Runtime/Language/InterpreterStackFrame.cpp index c040ddfb4eb..248158d1aae 100755 --- a/lib/Runtime/Language/InterpreterStackFrame.cpp +++ b/lib/Runtime/Language/InterpreterStackFrame.cpp @@ -501,7 +501,7 @@ { \ PROCESS_READ_LAYOUT(name, ElementSlot, suffix); \ SetReg(playout->Value, \ - func((FrameDisplay*)GetNonVarReg(playout->Instance), reinterpret_cast(this->m_functionBody->GetNestedFuncReference(playout->SlotIndex)))); \ + func((FrameDisplay*)GetNonVarReg(playout->Instance), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex))); \ break; \ } @@ -512,7 +512,7 @@ { \ PROCESS_READ_LAYOUT(name, ElementSlotI1, suffix); \ SetReg(playout->Value, \ - func(this->GetFrameDisplayForNestedFunc(), reinterpret_cast(this->m_functionBody->GetNestedFuncReference(playout->SlotIndex)))); \ + func(this->GetFrameDisplayForNestedFunc(), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex))); \ break; \ } @@ -1827,6 +1827,8 @@ namespace Js AssertMsg(!executeFunction->IsDeferredParseFunction(), "Non-intrinsic functions must provide byte-code to execute"); + executeFunction->BeginExecution(); + bool fReleaseAlloc = false; InterpreterStackFrame* newInstance = nullptr; Var* allocation = nullptr; @@ -1956,8 +1958,6 @@ namespace Js } #endif - executeFunction->BeginExecution(); - Var aReturn = nullptr; { @@ -2641,9 +2641,9 @@ namespace Js const auto& modFunc = info->GetFunction(i); // TODO: add more runtime checks here - auto proxy = m_functionBody->GetNestedFuncReference(i); + FunctionInfoPtrPtr functionInfo = m_functionBody->GetNestedFuncReference(i); - AsmJsScriptFunction* scriptFuncObj = (AsmJsScriptFunction*)ScriptFunction::OP_NewScFunc(pDisplay, (FunctionProxy**)proxy); + AsmJsScriptFunction* scriptFuncObj = (AsmJsScriptFunction*)ScriptFunction::OP_NewScFunc(pDisplay, functionInfo); localModuleFunctions[modFunc.location] = scriptFuncObj; if (i == 0 && info->GetUsesChangeHeap()) { @@ -3863,7 +3863,7 @@ namespace Js AssertMsg(static_cast(args.Info.Flags) == flags, "Flags don't fit into the CallInfo field?"); if (spreadIndices != nullptr) { - JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices); + JavascriptFunction::CallSpreadFunction(function, args, spreadIndices); } else { @@ -3877,7 +3877,7 @@ namespace Js AssertMsg(static_cast(args.Info.Flags) == flags, "Flags don't fit into the CallInfo field?"); if (spreadIndices != nullptr) { - SetReg((RegSlot)playout->Return, JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices)); + SetReg((RegSlot)playout->Return, JavascriptFunction::CallSpreadFunction(function, args, spreadIndices)); } else { @@ -7265,7 +7265,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) FrameDisplay *frameDisplay = this->GetFrameDisplayForNestedFunc(); SetRegAllowStackVarEnableOnly(playout->Value, StackScriptFunction::OP_NewStackScFunc(frameDisplay, - reinterpret_cast(this->m_functionBody->GetNestedFuncReference(funcIndex)), + this->m_functionBody->GetNestedFuncReference(funcIndex), this->GetStackNestedFunction(funcIndex))); } @@ -7276,7 +7276,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) FrameDisplay *frameDisplay = (FrameDisplay*)GetNonVarReg(playout->Instance); SetRegAllowStackVarEnableOnly(playout->Value, StackScriptFunction::OP_NewStackScFunc(frameDisplay, - reinterpret_cast(this->m_functionBody->GetNestedFuncReference(funcIndex)), + this->m_functionBody->GetNestedFuncReference(funcIndex), this->GetStackNestedFunction(funcIndex))); } @@ -7424,7 +7424,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) for (uint i = 0; i < nestedCount; i++) { StackScriptFunction * stackScriptFunction = scriptFunctions + i; - FunctionProxy* nestedProxy = functionBody->GetNestedFunc(i); + FunctionProxy* nestedProxy = functionBody->GetNestedFunctionProxy(i); ScriptFunctionType* type = nestedProxy->EnsureDeferredPrototypeType(); new (stackScriptFunction)StackScriptFunction(nestedProxy, type); } diff --git a/lib/Runtime/Language/JavascriptOperators.cpp b/lib/Runtime/Language/JavascriptOperators.cpp index 5ef3cf1bdaa..f3ff5786592 100644 --- a/lib/Runtime/Language/JavascriptOperators.cpp +++ b/lib/Runtime/Language/JavascriptOperators.cpp @@ -5541,13 +5541,6 @@ namespace Js ScriptFunction *func = entry->func; FunctionProxy * proxy = func->GetFunctionProxy(); - if (proxy != proxy->GetFunctionProxy()) - { - // The FunctionProxy has changed since the object was cached, e.g., due to execution - // of a deferred function through a different object. - proxy = proxy->GetFunctionProxy(); - func->SetFunctionInfo(proxy); - } // Reset the function's type to the default type with no properties // Use the cached type on the function proxy rather than the type in the func cache entry @@ -5573,7 +5566,7 @@ namespace Js uint nestedIndex = entry->nestedIndex; uint scopeSlot = entry->scopeSlot; - FunctionProxy * proxy = funcParent->GetFunctionBody()->GetNestedFunc(nestedIndex); + FunctionProxy * proxy = funcParent->GetFunctionBody()->GetNestedFunctionProxy(nestedIndex); ScriptFunction *func = scriptContext->GetLibrary()->CreateScriptFunction(proxy); @@ -9815,10 +9808,7 @@ namespace Js JavascriptOperators::GetDeferredDeserializedFunctionProxy(JavascriptFunction* func) { FunctionProxy* proxy = func->GetFunctionProxy(); - if (proxy->GetFunctionProxy() != proxy) - { - proxy = proxy->GetFunctionProxy(); - } + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() != proxy); return proxy; } diff --git a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp index ea16a67473c..578089483f7 100644 --- a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp +++ b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp @@ -523,11 +523,7 @@ namespace Js //CodeGenDone status is set by TJ if ((entryPointInfo->IsNotScheduled() || entryPointInfo->IsCodeGenDone()) && !PHASE_OFF(BackEndPhase, body) && !PHASE_OFF(FullJitPhase, body)) { - if (entryPointInfo->callsCount < 255) - { - ++entryPointInfo->callsCount; - } - const int minTemplatizedJitRunCount = (int)CONFIG_FLAG(MinTemplatizedJitRunCount); + const uint32 minTemplatizedJitRunCount = (uint32)CONFIG_FLAG(MinTemplatizedJitRunCount); if ((entryPointInfo->callsCount >= minTemplatizedJitRunCount || body->IsHotAsmJsLoop())) { if (PHASE_TRACE1(AsmjsEntryPointInfoPhase)) diff --git a/lib/Runtime/Library/GlobalObject.cpp b/lib/Runtime/Library/GlobalObject.cpp index 948e6023a42..abe81d3186f 100644 --- a/lib/Runtime/Library/GlobalObject.cpp +++ b/lib/Runtime/Library/GlobalObject.cpp @@ -764,6 +764,7 @@ namespace Js { // This could happen if the top level function is marked as deferred, we need to parse this to generate the script compile information (RegisterScript depends on that) Js::JavascriptFunction::DeferredParse(&pEvalFunction); + proxy = pEvalFunction->GetFunctionProxy(); } scriptContext->RegisterScript(proxy); @@ -984,7 +985,7 @@ namespace Js { FunctionBody* parentFuncBody = pfuncCaller->GetFunctionBody(); Utf8SourceInfo* parentUtf8SourceInfo = parentFuncBody->GetUtf8SourceInfo(); - Utf8SourceInfo* utf8SourceInfo = funcBody->GetFunctionProxy()->GetUtf8SourceInfo(); + Utf8SourceInfo* utf8SourceInfo = funcBody->GetUtf8SourceInfo(); utf8SourceInfo->SetCallerUtf8SourceInfo(parentUtf8SourceInfo); } } diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h index 7793d214d05..05fdbdcdc61 100644 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h +++ b/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h @@ -2732,18 +2732,18 @@ namespace Js /* 00005230 */ 0x00, 0x3B, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x8D, 0x1A, 0x01, /* 00005240 */ 0x00, 0x8D, 0x1A, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x8F, 0x1B, 0x01, /* 00005250 */ 0x00, 0x8F, 0x1B, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x1F, 0x1C, 0x01, -/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0x39, 0x6E, -/* 00005270 */ 0x00, 0x08, 0x00, 0xFC, 0x09, 0xFE, 0x9D, 0x02, 0xFE, 0xA8, 0x41, 0x00, 0x00, 0xFE, 0x75, 0x01, +/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0xB9, 0xDC, +/* 00005270 */ 0x00, 0x00, 0x00, 0xFC, 0x09, 0xFE, 0x9D, 0x02, 0xFE, 0xA8, 0x41, 0x00, 0x00, 0xFE, 0x75, 0x01, /* 00005280 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x75, 0x01, 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0xFF, 0xAF, -/* 00005290 */ 0x1A, 0x01, 0x00, 0x01, 0x04, 0x04, 0x05, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005290 */ 0x1A, 0x01, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0x02, 0x07, 0x0C, /* 000052C0 */ 0xA8, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFA, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000052D0 */ 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x10, 0x0A, 0x4F, 0xFC, +/* 000052D0 */ 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x52, 0x00, 0x00, 0xBF, 0xFD, 0x20, 0x04, 0x4F, 0xFC, /* 000052E0 */ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x01, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x01, 0x00, 0xFE, /* 000052F0 */ 0x97, 0x01, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x97, 0x01, 0xFF, 0x89, 0x1A, -/* 00005300 */ 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, 0x01, 0xFE, -/* 00005310 */ 0xA7, 0x01, 0x21, 0x10, 0x40, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005300 */ 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x40, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, 0x01, +/* 00005310 */ 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005320 */ 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005330 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9F, 0x02, 0x02, 0xFE, 0xA0, 0x02, 0x02, 0xFE, 0xA1, 0x02, 0x02, /* 00005340 */ 0xFE, 0xA2, 0x02, 0x03, 0x04, 0x02, 0xFE, 0xA3, 0x02, 0x02, 0xFE, 0xA4, 0x02, 0x02, 0xFE, 0xA5, @@ -2967,7 +2967,7 @@ namespace Js /* 000060E0 */ 0xDB, 0x00, 0x00, 0x02, 0xD8, 0x00, 0x00, 0xEB, 0xD4, 0x00, 0x00, 0xA7, 0xD3, 0x00, 0x00, 0x69, /* 000060F0 */ 0xD1, 0x00, 0x00, 0x93, 0xD0, 0x00, 0x00, 0xBD, 0xCF, 0x00, 0x00, 0xE7, 0xCE, 0x00, 0x00, 0x17, /* 00006100 */ 0xCC, 0x00, 0x00, 0xBE, 0xCA, 0x00, 0x00, 0x5F, 0xB2, 0x00, 0x00, 0xD1, 0x99, 0x00, 0x00, 0x13, -/* 00006110 */ 0x61, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 00006110 */ 0x61, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 00006120 */ 0x7F, 0x03, 0x1A, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x33, 0x00, 0xFE, 0x84, 0xAC, 0x0E, 0xFF, 0x00, /* 00006130 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0xAC, 0xFE, 0xAF, 0x6D, 0xFE, 0xAF, 0x6D, 0x01, 0x13, /* 00006140 */ 0x2F, 0x3B, 0x09, 0xD9, 0xD9, 0x01, 0x10, 0x01, 0x09, 0x11, 0x11, 0x11, 0x11, 0x06, 0x02, 0x38, @@ -3089,10 +3089,10 @@ namespace Js /* 00006880 */ 0x00, 0x00, 0x8C, 0x8E, 0x00, 0x00, 0x46, 0x8C, 0x00, 0x00, 0x3B, 0x8A, 0x00, 0x00, 0x92, 0x85, /* 00006890 */ 0x00, 0x00, 0xE7, 0x7B, 0x00, 0x00, 0x67, 0x79, 0x00, 0x00, 0xEB, 0x76, 0x00, 0x00, 0x6F, 0x74, /* 000068A0 */ 0x00, 0x00, 0xB8, 0x71, 0x00, 0x00, 0x0E, 0x6F, 0x00, 0x00, 0xC8, 0x6D, 0x00, 0x00, 0xB2, 0x68, -/* 000068B0 */ 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, 0x4D, 0x05, 0x1B, +/* 000068B0 */ 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, 0x4D, 0x05, 0x1B, /* 000068C0 */ 0xFF, 0xA0, 0x41, 0x03, 0x00, 0x42, 0x00, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 000068D0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, 0xFE, 0x0D, 0x08, 0x03, -/* 000068E0 */ 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x08, 0x20, 0x20, 0x20, 0x20, 0x01, 0x16, +/* 000068D0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, 0xFE, 0x0D, 0x08, 0x08, +/* 000068E0 */ 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x20, 0x20, 0x20, 0x20, 0x01, 0x16, /* 000068F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006900 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0xBD, 0x03, /* 00006910 */ 0x02, 0xFE, 0xC7, 0x02, 0x02, 0xFE, 0xF6, 0x02, 0x02, 0xFE, 0xBE, 0x03, 0x02, 0xFE, 0x4A, 0x03, @@ -3154,10 +3154,10 @@ namespace Js /* 00006C90 */ 0x10, 0x01, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x92, 0x00, /* 00006CA0 */ 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x92, 0x00, 0x13, 0x01, 0xDE, 0x03, /* 00006CB0 */ 0x28, 0x00, 0x3F, 0x00, 0x61, 0x00, 0x5B, 0x01, 0x3B, 0x00, 0x45, 0x00, 0x00, 0xC1, 0x6C, 0x00, -/* 00006CC0 */ 0x00, 0x3F, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x66, 0x05, +/* 00006CC0 */ 0x00, 0xBF, 0xFC, 0x3A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x66, 0x05, /* 00006CD0 */ 0x60, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x43, 0x00, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00006CE0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x04, 0x05, 0x07, 0x05, 0x1A, -/* 00006CF0 */ 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CE0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x41, 0x04, 0x05, 0x07, 0x05, +/* 00006CF0 */ 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xB1, 0x03, 0x02, 0xFE, 0x60, 0x03, /* 00006D20 */ 0x04, 0x90, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, @@ -3170,10 +3170,10 @@ namespace Js /* 00006D90 */ 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, /* 00006DA0 */ 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, 0x08, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x00, /* 00006DB0 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x17, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x68, -/* 00006DC0 */ 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, +/* 00006DC0 */ 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, /* 00006DD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x05, 0x39, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x41, 0x00, 0xFF, /* 00006DE0 */ 0x61, 0x0D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x61, 0x0D, 0x01, 0x00, -/* 00006DF0 */ 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, +/* 00006DF0 */ 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, /* 00006E00 */ 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E10 */ 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E20 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0xBC, 0x03, 0x02, 0xFE, 0xC7, @@ -3190,11 +3190,11 @@ namespace Js /* 00006ED0 */ 0x00, 0x62, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, /* 00006EE0 */ 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x46, 0x02, 0x00, 0xFF, 0x88, 0x0D, 0x01, 0x00, /* 00006EF0 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x26, 0x00, 0x4C, -/* 00006F00 */ 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x7E, -/* 00006F10 */ 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x22, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, +/* 00006F00 */ 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFC, +/* 00006F10 */ 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x22, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, /* 00006F20 */ 0x00, 0x40, 0x00, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00006F30 */ 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0A, 0x09, 0x0D, 0x0A, 0x61, 0x60, -/* 00006F40 */ 0x04, 0x03, 0x0C, 0x06, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006F30 */ 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0B, 0x0A, 0x09, 0x0D, 0x0A, 0x61, +/* 00006F40 */ 0x60, 0x04, 0x03, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006F50 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006F60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 00006F70 */ 0xFE, 0xBC, 0x03, 0x02, 0xFE, 0xC7, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -3233,10 +3233,10 @@ namespace Js /* 00007180 */ 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFF, 0x0E, 0x07, 0x01, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x0B, /* 00007190 */ 0x00, 0x39, 0x00, 0x2A, 0x00, 0x81, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x68, 0x00, 0x2A, /* 000071A0 */ 0x00, 0x83, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x50, 0x00, 0x53, 0x00, 0x20, 0x00, 0x51, 0x00, 0x6D, -/* 000071B0 */ 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 000071B0 */ 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 000071C0 */ 0xC7, 0x02, 0xFE, 0x02, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x3F, 0x00, 0xFF, 0x1B, 0x01, /* 000071D0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1B, 0x01, 0x01, 0x00, 0xFE, 0x69, -/* 000071E0 */ 0x05, 0xFE, 0x69, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, +/* 000071E0 */ 0x05, 0xFE, 0x69, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, /* 000071F0 */ 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007200 */ 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007210 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, @@ -3276,11 +3276,11 @@ namespace Js /* 00007430 */ 0x2D, 0x00, 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, /* 00007440 */ 0x5B, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0xA1, 0x00, 0x26, 0x00, /* 00007450 */ 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, -/* 00007460 */ 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, -/* 00007470 */ 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF5, 0x04, 0x64, 0xFF, +/* 00007460 */ 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, +/* 00007470 */ 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF5, 0x04, 0x64, 0xFF, /* 00007480 */ 0xA0, 0x41, 0x31, 0x00, 0x3E, 0x00, 0xFE, 0x21, 0xFE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00007490 */ 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, -/* 000074A0 */ 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007490 */ 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, +/* 000074A0 */ 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000074B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000074C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 000074D0 */ 0xFE, 0x76, 0x03, 0x02, 0xFE, 0x61, 0x03, 0x04, 0x02, 0xFE, 0xBB, 0x03, 0x01, 0x00, 0x00, 0x00, @@ -3316,10 +3316,10 @@ namespace Js /* 000076B0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, /* 000076C0 */ 0x02, 0x00, 0xFE, 0x40, 0xFE, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 000076D0 */ 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 000076E0 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, +/* 000076E0 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, /* 000076F0 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, 0xA0, 0x41, 0x31, 0x00, /* 00007700 */ 0x3D, 0x00, 0xFE, 0xF9, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xF9, 0xFA, 0xFE, -/* 00007710 */ 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, +/* 00007710 */ 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, /* 00007720 */ 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007730 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007740 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x75, 0x03, 0x02, @@ -3356,10 +3356,10 @@ namespace Js /* 00007930 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0x18, /* 00007940 */ 0xFB, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x45, 0x00, /* 00007950 */ 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, -/* 00007960 */ 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, +/* 00007960 */ 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, /* 00007970 */ 0xFF, 0xFF, 0xFF, 0xFE, 0xDB, 0x04, 0x60, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x3C, 0x00, 0xFE, 0xD7, /* 00007980 */ 0xF7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD7, 0xF7, 0xFE, 0xB4, 0x02, 0xFE, 0xB4, -/* 00007990 */ 0x02, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, +/* 00007990 */ 0x02, 0x0B, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, /* 000079A0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079B0 */ 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079C0 */ 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x74, 0x03, 0x02, 0xFE, 0x61, 0x03, 0x04, @@ -3396,10 +3396,10 @@ namespace Js /* 00007BB0 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0xF6, /* 00007BC0 */ 0xF7, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, 0x6D, 0x00, 0x45, 0x00, /* 00007BD0 */ 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, -/* 00007BE0 */ 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x25, 0x0B, 0x4F, 0xFD, 0x07, 0xFE, 0x81, +/* 00007BE0 */ 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x4A, 0x06, 0x4F, 0xFD, 0x07, 0xFE, 0x81, /* 00007BF0 */ 0x03, 0xFE, 0x58, 0x04, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x3B, 0x00, 0xFE, 0x61, 0xDB, 0xFF, -/* 00007C00 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, 0xFE, 0x04, 0x1C, 0x1C, -/* 00007C10 */ 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, 0x22, 0x0E, 0x45, 0x2B, +/* 00007C00 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, 0xFE, 0x04, 0x1C, 0x45, +/* 00007C10 */ 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, 0x22, 0x0E, 0x2B, /* 00007C20 */ 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C40 */ 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC7, 0x02, 0x08, @@ -3551,10 +3551,10 @@ namespace Js /* 00008560 */ 0x00, 0x04, 0x00, 0x38, 0x00, 0x07, 0x00, 0x5C, 0x00, 0x34, 0x00, 0xE3, 0x00, 0x28, 0x00, 0x48, /* 00008570 */ 0x00, 0x01, 0x00, 0x4C, 0x00, 0x1B, 0x00, 0x7C, 0x01, 0x1D, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x68, /* 00008580 */ 0x00, 0x35, 0x00, 0x83, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x40, -/* 00008590 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0x80, 0x03, 0xFE, 0x1E, 0x04, 0x0C, +/* 00008590 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0x80, 0x03, 0xFE, 0x1E, 0x04, 0x0C, /* 000085A0 */ 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x3A, 0x00, 0xFE, 0xEB, 0xCD, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 000085B0 */ 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, -/* 000085C0 */ 0x03, 0x02, 0x10, 0x07, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000085B0 */ 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x01, 0x07, 0x12, 0x16, 0x06, 0xC8, +/* 000085C0 */ 0xBB, 0x03, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000085D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000085E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xAB, 0x03, 0x04, /* 000085F0 */ 0x02, 0xFE, 0x91, 0x03, 0x03, 0x02, 0xFE, 0xAC, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, @@ -3625,10 +3625,10 @@ namespace Js /* 00008A00 */ 0x91, 0x00, 0x2F, 0x00, 0x77, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x8E, 0x00, 0x0E, 0x00, /* 00008A10 */ 0x3F, 0x00, 0x2C, 0x00, 0x8A, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2C, 0x00, 0x8C, 0x00, 0x0E, 0x00, /* 00008A20 */ 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, -/* 00008A30 */ 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, +/* 00008A30 */ 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, /* 00008A40 */ 0xFC, 0x07, 0xFE, 0x7F, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x39, 0x00, /* 00008A50 */ 0xFE, 0xF7, 0xC8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xF7, 0xC8, 0xFE, 0x81, 0x04, -/* 00008A60 */ 0xFE, 0x81, 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, +/* 00008A60 */ 0xFE, 0x81, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, /* 00008A70 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A80 */ 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A90 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9B, 0x03, 0x02, 0xFE, 0xA6, 0x03, 0x04, 0x03, 0x02, 0xFE, 0xA7, @@ -3658,10 +3658,10 @@ namespace Js /* 00008C10 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0xFE, 0xAC, 0xC9, 0x0A, 0x00, 0x00, 0x00, /* 00008C20 */ 0x00, 0x49, 0x00, 0x90, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x42, 0x00, 0x01, 0x01, 0x06, 0x00, 0x3C, /* 00008C30 */ 0x00, 0x08, 0x00, 0x6E, 0x00, 0x47, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x33, 0x00, 0x44, 0x00, 0x8D, -/* 00008C40 */ 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x7E, 0x03, +/* 00008C40 */ 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x7E, 0x03, /* 00008C50 */ 0xFE, 0xFC, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x38, 0x00, 0xFE, 0xBE, 0xC3, 0xFF, 0x00, -/* 00008C60 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, 0x2B, 0x05, 0x09, 0x14, -/* 00008C70 */ 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, +/* 00008C60 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, 0x2B, 0x05, 0x01, 0x09, +/* 00008C70 */ 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, /* 00008C80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0xFF, 0xFF, 0xFF, /* 00008C90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00008CA0 */ 0x9B, 0x03, 0x02, 0xFE, 0x9C, 0x03, 0x04, 0x03, 0x02, 0xFE, 0x9D, 0x03, 0x02, 0xFE, 0x9E, 0x03, @@ -3694,10 +3694,10 @@ namespace Js /* 00008E50 */ 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0xFE, /* 00008E60 */ 0x96, 0xC4, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x0D, 0x01, 0x08, 0x00, 0x2B, 0x00, 0x42, /* 00008E70 */ 0x00, 0xF6, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x16, 0x00, 0x48, 0x00, 0x52, 0x00, 0x86, 0x00, 0x08, -/* 00008E80 */ 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x6E, 0x05, 0x0A, +/* 00008E80 */ 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xDC, 0x0A, 0x04, /* 00008E90 */ 0x00, 0xFC, 0x07, 0xFE, 0x7D, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x37, /* 00008EA0 */ 0x00, 0xFE, 0x4E, 0xC2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x4E, 0xC2, 0xEF, 0xEF, -/* 00008EB0 */ 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00008EB0 */ 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008EC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008ED0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x0D, 0x03, 0x02, 0xFE, /* 00008EE0 */ 0xBB, 0x02, 0x02, 0xFE, 0x63, 0x03, 0x34, 0x2C, 0x07, 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, @@ -3705,7 +3705,7 @@ namespace Js /* 00008F00 */ 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, /* 00008F10 */ 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x8A, /* 00008F20 */ 0xC2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x31, 0x00, 0x21, 0x00, -/* 00008F30 */ 0x45, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0x7C, 0x03, 0xFE, 0xB3, 0x03, +/* 00008F30 */ 0x45, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x7C, 0x03, 0xFE, 0xB3, 0x03, /* 00008F40 */ 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x35, 0x00, 0xFE, 0x96, 0xB6, 0x01, 0xFF, 0x00, 0x10, 0x01, /* 00008F50 */ 0x00, 0x02, 0x02, 0xFE, 0x96, 0xB6, 0xFE, 0xC7, 0x09, 0xFE, 0xC7, 0x09, 0x02, 0x06, 0x17, 0x1B, /* 00008F60 */ 0x05, 0xCC, 0xCA, 0x03, 0x0D, 0x02, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, @@ -3793,10 +3793,10 @@ namespace Js /* 00009480 */ 0x58, 0x00, 0x3A, 0x00, 0x60, 0x00, 0x14, 0x00, 0x39, 0x00, 0x37, 0x00, 0x7A, 0x00, 0x13, 0x00, /* 00009490 */ 0x28, 0x00, 0x37, 0x00, 0x5C, 0x00, 0x13, 0x00, 0x31, 0x00, 0x14, 0x00, 0x41, 0x00, 0x3A, 0x00, /* 000094A0 */ 0x63, 0x00, 0x14, 0x00, 0x40, 0x00, 0x37, 0x00, 0x7D, 0x00, 0x44, 0x00, 0x42, 0x01, 0x72, 0x00, -/* 000094B0 */ 0x73, 0x00, 0x00, 0xB7, 0x94, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, +/* 000094B0 */ 0x73, 0x00, 0x00, 0xB7, 0x94, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, /* 000094C0 */ 0xFF, 0xFF, 0xFF, 0xFE, 0xDD, 0x03, 0x55, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x36, 0x00, 0xFE, 0xEC, -/* 000094D0 */ 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, 0xB0, 0x04, 0x03, 0x05, -/* 000094E0 */ 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000094D0 */ 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, 0xB0, 0x41, 0x04, 0x03, +/* 000094E0 */ 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000094F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009500 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, /* 00009510 */ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, 0x00, 0x0F, 0x03, 0x00, @@ -3805,10 +3805,10 @@ namespace Js /* 00009540 */ 0x02, 0x00, 0x5C, 0x01, 0x06, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x03, /* 00009550 */ 0x00, 0x5C, 0x02, 0x06, 0x5C, 0x03, 0x03, 0xEE, 0x04, 0xFF, 0x05, 0x00, 0x00, 0xA8, 0x00, 0x24, /* 00009560 */ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x12, 0xBF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x2D, 0x00, -/* 00009570 */ 0x3B, 0x00, 0x5C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x7B, 0x03, 0xFE, +/* 00009570 */ 0x3B, 0x00, 0x5C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x7B, 0x03, 0xFE, /* 00009580 */ 0x82, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x34, 0x00, 0xFE, 0xDC, 0xAC, 0xFF, 0x00, 0x10, -/* 00009590 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, 0x09, 0x07, 0x15, 0x1A, -/* 000095A0 */ 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x01, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00009590 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, 0x09, 0x01, 0x07, 0x15, +/* 000095A0 */ 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, /* 000095B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, /* 000095C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x08, /* 000095D0 */ 0x02, 0xFE, 0x82, 0x03, 0x02, 0xFE, 0x83, 0x03, 0x09, 0x02, 0xFE, 0x84, 0x03, 0x02, 0xFE, 0x85, @@ -3875,7 +3875,7 @@ namespace Js /* 000099A0 */ 0x10, 0x00, 0x46, 0x00, 0x2A, 0x00, 0x79, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x17, 0x00, 0x58, 0x00, /* 000099B0 */ 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD0, 0x00, 0x40, 0x00, 0xDD, 0x00, 0x17, 0x00, 0x58, 0x00, /* 000099C0 */ 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD1, 0x00, 0x40, 0x00, 0xE0, 0x00, 0x08, 0x00, 0x1D, 0x00, -/* 000099D0 */ 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x90, 0x02, +/* 000099D0 */ 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x90, 0x02, /* 000099E0 */ 0x18, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x2B, 0x00, 0xFE, 0x40, 0x7A, 0x06, 0xFF, 0x00, 0x10, 0x01, /* 000099F0 */ 0x00, 0x01, 0x01, 0xFE, 0x40, 0x7A, 0xFE, 0xA1, 0x31, 0xFE, 0xA1, 0x31, 0x01, 0x0D, 0x22, 0x28, /* 00009A00 */ 0x09, 0xA6, 0xA6, 0x01, 0x0C, 0x01, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0x25, 0xFF, 0xFF, @@ -3964,10 +3964,10 @@ namespace Js /* 00009F30 */ 0x61, 0x00, 0x9A, 0x00, 0x3E, 0x00, 0x49, 0x00, 0x5C, 0x00, 0xA0, 0x00, 0x68, 0x00, 0xD8, 0x04, /* 00009F40 */ 0x7F, 0x00, 0x25, 0x03, 0x0F, 0x00, 0x88, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x86, 0xA9, 0x00, /* 00009F50 */ 0x00, 0xB9, 0xA7, 0x00, 0x00, 0x08, 0xA5, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0xA5, 0xA0, 0x00, -/* 00009F60 */ 0x00, 0x65, 0x9F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00009F60 */ 0x00, 0x65, 0x9F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009F70 */ 0xFF, 0xFE, 0x69, 0x03, 0x39, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x32, 0x00, 0xFE, 0x8F, 0xA8, 0xFF, -/* 00009F80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x05, -/* 00009F90 */ 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, +/* 00009F80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x09, +/* 00009F90 */ 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, /* 00009FA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, /* 00009FB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00009FC0 */ 0x12, 0x03, 0x02, 0xFE, 0x5D, 0x03, 0x02, 0xFE, 0xC6, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, @@ -3984,10 +3984,10 @@ namespace Js /* 0000A070 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, /* 0000A080 */ 0xFE, 0x46, 0x02, 0x00, 0xFE, 0xB6, 0xA8, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 0000A090 */ 0x2A, 0x00, 0x87, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x87, 0x00, -/* 0000A0A0 */ 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, +/* 0000A0A0 */ 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, /* 0000A0B0 */ 0x53, 0x03, 0x1B, 0xFF, 0xA0, 0x41, 0x03, 0x00, 0x30, 0x00, 0xFE, 0xA2, 0xA3, 0x01, 0xFF, 0x00, -/* 0000A0C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, 0x1A, 0x04, 0x02, 0x06, -/* 0000A0D0 */ 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x08, 0xFF, 0xFF, +/* 0000A0C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, 0x1A, 0x04, 0x08, 0x02, +/* 0000A0D0 */ 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x03, 0x03, 0x03, 0x03, 0x08, 0xFF, 0xFF, /* 0000A0E0 */ 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A0F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x5E, 0x03, 0x02, 0xFE, /* 0000A100 */ 0xC6, 0x02, 0x03, 0x04, 0xFE, 0x48, 0x01, 0x5B, 0x07, 0xB4, 0x07, 0x07, 0x2C, 0x0B, 0x07, 0x15, @@ -4014,10 +4014,10 @@ namespace Js /* 0000A250 */ 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x5F, 0x03, 0xFE, 0xEB, 0x01, /* 0000A260 */ 0x00, 0xFE, 0xD8, 0xA3, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8E, /* 0000A270 */ 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x90, 0x00, 0x28, 0x00, 0x49, -/* 0000A280 */ 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x8E, 0xA2, 0x00, 0x00, 0x3F, 0x6E, -/* 0000A290 */ 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, 0x03, 0x48, 0xFF, 0xA2, +/* 0000A280 */ 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x8E, 0xA2, 0x00, 0x00, 0xBF, 0xDC, +/* 0000A290 */ 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, 0x03, 0x48, 0xFF, 0xA2, /* 0000A2A0 */ 0x41, 0x11, 0x00, 0x31, 0x00, 0xFE, 0x62, 0xA6, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0000A2B0 */ 0x62, 0xA6, 0xFC, 0xFC, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x02, 0x41, 0xFF, 0xFF, +/* 0000A2B0 */ 0x62, 0xA6, 0xFC, 0xFC, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x02, 0xFF, 0xFF, /* 0000A2C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, /* 0000A2D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A2E0 */ 0xFE, 0x60, 0x03, 0x02, 0xFE, 0x0D, 0x03, 0x48, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, @@ -4026,10 +4026,10 @@ namespace Js /* 0000A310 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x04, /* 0000A320 */ 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, /* 0000A330 */ 0x00, 0x00, 0x00, 0xFE, 0x93, 0xA6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x5B, 0x00, 0x2A, -/* 0000A340 */ 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x37, +/* 0000A340 */ 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x37, /* 0000A350 */ 0x03, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x2F, 0x00, 0xFE, 0xAA, 0x9C, 0xFF, 0x00, 0x10, 0x01, -/* 0000A360 */ 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, 0x08, 0x07, 0x0B, 0x07, -/* 0000A370 */ 0x3D, 0x39, 0x04, 0x06, 0x03, 0x09, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A360 */ 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, 0x09, 0x08, 0x07, 0x0B, +/* 0000A370 */ 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A380 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A390 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 0000A3A0 */ 0xFE, 0x5D, 0x03, 0x02, 0xFE, 0xC6, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFE, 0x21, 0x01, @@ -4054,10 +4054,10 @@ namespace Js /* 0000A4D0 */ 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, 0xFE, /* 0000A4E0 */ 0xFB, 0x01, 0x00, 0xFE, 0xD4, 0x9C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x26, 0x00, 0x31, 0x00, 0x0B, /* 0000A4F0 */ 0x00, 0x39, 0x00, 0x2A, 0x00, 0x7F, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, -/* 0000A500 */ 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 0000A500 */ 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 0000A510 */ 0xC6, 0x02, 0xFE, 0x15, 0x03, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x2E, 0x00, 0xFE, 0xEB, 0x96, /* 0000A520 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0x96, 0xFE, 0x64, 0x05, 0xFE, 0x64, 0x05, -/* 0000A530 */ 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, +/* 0000A530 */ 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, /* 0000A540 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, /* 0000A550 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000A560 */ 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, @@ -4097,10 +4097,10 @@ namespace Js /* 0000A780 */ 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x59, 0x00, 0x26, 0x00, 0x3A, 0x00, /* 0000A790 */ 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9F, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, /* 0000A7A0 */ 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x42, 0x00, 0x66, 0x00, -/* 0000A7B0 */ 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, +/* 0000A7B0 */ 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, /* 0000A7C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x2D, 0x00, /* 0000A7D0 */ 0xFE, 0x36, 0x94, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x36, 0x94, 0xFE, 0x73, 0x02, -/* 0000A7E0 */ 0xFE, 0x73, 0x02, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, 0x06, 0x0B, 0x03, 0x03, +/* 0000A7E0 */ 0xFE, 0x73, 0x02, 0x0B, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, 0x06, 0x03, 0x03, /* 0000A7F0 */ 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A800 */ 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A810 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x09, 0x03, 0x02, 0xFE, 0x47, 0x03, 0x02, 0xFE, 0x46, @@ -4126,10 +4126,10 @@ namespace Js /* 0000A950 */ 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x2A, /* 0000A960 */ 0x02, 0xFE, 0xFB, 0x01, 0x00, 0xFE, 0x59, 0x94, 0x07, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x58, /* 0000A970 */ 0x00, 0x2A, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x3F, 0x00, 0x2F, 0x00, 0x58, 0x00, 0x26, 0x00, 0x8F, -/* 0000A980 */ 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0x3F, 0x7E, 0x21, 0x0B, 0x0F, 0xFD, 0x07, 0xFE, 0x56, 0x03, +/* 0000A980 */ 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0xBF, 0xFC, 0x42, 0x06, 0x0F, 0xFD, 0x07, 0xFE, 0x56, 0x03, /* 0000A990 */ 0xFE, 0x94, 0x02, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x2C, 0x00, 0xFE, 0x9C, 0x7A, 0xFF, 0x00, -/* 0000A9A0 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, 0x34, 0x19, 0x18, 0x23, -/* 0000A9B0 */ 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, 0x45, 0x1E, 0x1E, 0x1E, +/* 0000A9A0 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, 0x34, 0x19, 0x45, 0x18, +/* 0000A9B0 */ 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, 0x1E, 0x1E, 0x1E, /* 0000A9C0 */ 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9D0 */ 0xFF, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A9E0 */ 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC6, 0x02, 0x08, 0x02, 0xFE, 0x0D, @@ -4268,7 +4268,7 @@ namespace Js /* 0000B230 */ 0x51, 0x00, 0x0A, 0x00, 0x43, 0x00, 0x04, 0x00, 0x59, 0x00, 0x04, 0x00, 0x68, 0x00, 0x04, 0x00, /* 0000B240 */ 0x41, 0x00, 0x07, 0x00, 0xAD, 0x00, 0x25, 0x00, 0x4E, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1B, 0x00, /* 0000B250 */ 0x6F, 0x01, 0x1D, 0x00, 0x4D, 0x00, 0x35, 0x00, 0x7F, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, -/* 0000B260 */ 0x7E, 0x11, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, +/* 0000B260 */ 0xFC, 0x22, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, /* 0000B270 */ 0xA0, 0x41, 0x11, 0x00, 0x23, 0x00, 0xFE, 0xA2, 0x49, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, /* 0000B280 */ 0x01, 0xFE, 0xA2, 0x49, 0xFE, 0x43, 0x30, 0xFE, 0x43, 0x30, 0x0B, 0x17, 0x1B, 0x09, 0x99, 0x99, /* 0000B290 */ 0x01, 0x0C, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -4350,11 +4350,11 @@ namespace Js /* 0000B750 */ 0x41, 0x00, 0x2C, 0x00, 0x67, 0x03, 0x54, 0x00, 0x95, 0x00, 0x61, 0x00, 0x92, 0x00, 0x3E, 0x00, /* 0000B760 */ 0x47, 0x00, 0x5C, 0x00, 0x98, 0x00, 0x68, 0x00, 0xBD, 0x05, 0x7F, 0x00, 0x12, 0x03, 0x0F, 0x00, /* 0000B770 */ 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x79, 0xC1, 0x00, 0x00, 0x58, 0xBF, 0x00, 0x00, 0xA7, -/* 0000B780 */ 0xBC, 0x00, 0x00, 0xBD, 0xBA, 0x00, 0x00, 0xCF, 0xB8, 0x00, 0x00, 0x8F, 0xB7, 0x00, 0x00, 0x3F, -/* 0000B790 */ 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, +/* 0000B780 */ 0xBC, 0x00, 0x00, 0xBD, 0xBA, 0x00, 0x00, 0xCF, 0xB8, 0x00, 0x00, 0x8F, 0xB7, 0x00, 0x00, 0xBF, +/* 0000B790 */ 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, /* 0000B7A0 */ 0xA0, 0x41, 0x11, 0x00, 0x2A, 0x00, 0xFE, 0xAC, 0x76, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000B7B0 */ 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, -/* 0000B7C0 */ 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B7B0 */ 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, +/* 0000B7C0 */ 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x44, 0x03, /* 0000B7F0 */ 0x02, 0xFE, 0xC2, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, @@ -4370,11 +4370,11 @@ namespace Js /* 0000B890 */ 0x00, 0x00, 0x02, 0x00, 0x62, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000B8A0 */ 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0x00, 0xFE, 0xD3, /* 0000B8B0 */ 0x76, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x26, 0x00, -/* 0000B8C0 */ 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x09, 0x00, 0x39, 0x00, 0x00, 0x3F, -/* 0000B8D0 */ 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x26, 0x03, 0xFE, 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, +/* 0000B8C0 */ 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x09, 0x00, 0x39, 0x00, 0x00, 0xBF, +/* 0000B8D0 */ 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x26, 0x03, 0xFE, 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, /* 0000B8E0 */ 0x03, 0x00, 0x29, 0x00, 0xFE, 0xD8, 0x70, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, -/* 0000B8F0 */ 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x05, 0x0D, 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, -/* 0000B900 */ 0x09, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B8F0 */ 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x09, 0x05, 0x0D, 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, +/* 0000B900 */ 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B910 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B920 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x45, 0x03, 0x02, /* 0000B930 */ 0xFE, 0xC2, 0x02, 0x02, 0xFE, 0xF6, 0x02, 0x02, 0xFE, 0x2C, 0x03, 0x02, 0xFE, 0x2F, 0x03, 0x02, @@ -4401,10 +4401,10 @@ namespace Js /* 0000BA80 */ 0xFE, 0xEE, 0x01, 0xFE, 0x40, 0x02, 0xFE, 0xF0, 0x01, 0xFE, 0x43, 0x02, 0xFE, 0x3E, 0x03, 0xFE, /* 0000BA90 */ 0x42, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x35, 0x03, 0x00, 0xFE, 0x0E, 0x71, 0x07, /* 0000BAA0 */ 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x86, 0x00, 0x26, 0x00, 0x4C, 0x00, -/* 0000BAB0 */ 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, 0xCF, 0x02, 0x00, 0x3F, 0x7E, 0x11, -/* 0000BAC0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x27, 0x03, 0xFE, 0x4C, 0x02, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, +/* 0000BAB0 */ 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, 0xCF, 0x02, 0x00, 0xBF, 0xFC, 0x22, +/* 0000BAC0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x27, 0x03, 0xFE, 0x4C, 0x02, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, /* 0000BAD0 */ 0x28, 0x00, 0xFE, 0x63, 0x6B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, -/* 0000BAE0 */ 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x06, 0x0B, 0x0B, 0x44, 0x41, 0x03, 0x07, 0x03, 0x09, 0x08, +/* 0000BAE0 */ 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x09, 0x06, 0x0B, 0x0B, 0x44, 0x41, 0x03, 0x07, 0x03, 0x08, /* 0000BAF0 */ 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB00 */ 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB10 */ 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x44, 0x03, 0x02, 0xFE, 0xC2, 0x02, @@ -4432,10 +4432,10 @@ namespace Js /* 0000BC70 */ 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x42, 0x02, 0x00, 0xFE, 0x91, /* 0000BC80 */ 0x6B, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x26, 0x00, /* 0000BC90 */ 0x48, 0x00, 0x15, 0x00, 0x62, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, -/* 0000BCA0 */ 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC2, +/* 0000BCA0 */ 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC2, /* 0000BCB0 */ 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x27, 0x00, 0xFE, 0x3A, 0x65, 0xFF, -/* 0000BCC0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0A, -/* 0000BCD0 */ 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, +/* 0000BCC0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0B, +/* 0000BCD0 */ 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, /* 0000BCE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, /* 0000BCF0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000BD00 */ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x04, @@ -4475,10 +4475,10 @@ namespace Js /* 0000BF20 */ 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x55, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, /* 0000BF30 */ 0x00, 0x39, 0x00, 0x25, 0x00, 0x9B, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, /* 0000BF40 */ 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x79, 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, -/* 0000BF50 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, +/* 0000BF50 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, /* 0000BF60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x26, 0x00, 0xFE, /* 0000BF70 */ 0x19, 0x61, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, -/* 0000BF80 */ 0xDD, 0x03, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, 0x08, 0x05, 0x0B, 0x07, 0x07, 0x07, +/* 0000BF80 */ 0xDD, 0x03, 0x0B, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, 0x08, 0x05, 0x07, 0x07, 0x07, /* 0000BF90 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFA0 */ 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFB0 */ 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x21, 0x03, 0x04, 0x01, 0x01, 0x00, @@ -4509,11 +4509,11 @@ namespace Js /* 0000C140 */ 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x42, 0x02, 0x00, 0xFE, 0x3C, 0x61, 0x0B, 0x09, 0x00, 0x00, 0x00, /* 0000C150 */ 0x09, 0x00, 0x2E, 0x00, 0x12, 0x00, 0x44, 0x00, 0x28, 0x00, 0x77, 0x00, 0x08, 0x00, 0x2E, 0x00, /* 0000C160 */ 0x20, 0x00, 0xF1, 0x00, 0x1E, 0x00, 0x31, 0x00, 0x1E, 0x00, 0x2E, 0x00, 0x23, 0x00, 0x46, 0x00, -/* 0000C170 */ 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, 0x7E, 0x25, 0x0B, 0x0F, 0xFD, 0x0F, +/* 0000C170 */ 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, 0xFD, 0x4A, 0x06, 0x0F, 0xFD, 0x0F, /* 0000C180 */ 0xFE, 0x2A, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x24, 0x00, 0xFE, 0xFE, /* 0000C190 */ 0x49, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, -/* 0000C1A0 */ 0xB6, 0x16, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, -/* 0000C1B0 */ 0x44, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, +/* 0000C1A0 */ 0xB6, 0x16, 0x44, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, +/* 0000C1B0 */ 0x0F, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, /* 0000C1C0 */ 0xFF, 0xFF, 0xFF, 0x35, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 0000C1D0 */ 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x02, 0x08, 0x02, 0xFE, 0x0D, 0x03, 0x03, 0x02, 0xFE, /* 0000C1E0 */ 0x1A, 0x03, 0x02, 0xFE, 0x08, 0x03, 0x02, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, @@ -4613,11 +4613,11 @@ namespace Js /* 0000C7C0 */ 0x0A, 0x00, 0x36, 0x00, 0x03, 0x00, 0x3F, 0x00, 0x12, 0x00, 0x1B, 0x00, 0x06, 0x00, 0x56, 0x00, /* 0000C7D0 */ 0x04, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x49, 0x00, 0x04, 0x00, 0x2B, 0x00, /* 0000C7E0 */ 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x2F, 0x00, -/* 0000C7F0 */ 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0xFD, 0xC7, 0x00, 0x00, 0x3F, 0x7E, 0x35, -/* 0000C800 */ 0x0A, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, +/* 0000C7F0 */ 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0xFD, 0xC7, 0x00, 0x00, 0xBF, 0xFC, 0x6A, +/* 0000C800 */ 0x04, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, /* 0000C810 */ 0x11, 0x00, 0x25, 0x00, 0xFE, 0xE3, 0x51, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, -/* 0000C820 */ 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x09, 0x15, 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, -/* 0000C830 */ 0x01, 0x08, 0x41, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000C820 */ 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x41, 0x09, 0x15, 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, +/* 0000C830 */ 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000C840 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000C850 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, /* 0000C860 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0xBB, 0x02, 0x02, 0xFE, 0x3F, 0x03, 0x02, 0xFE, 0x35, 0x03, @@ -4657,11 +4657,11 @@ namespace Js /* 0000CA80 */ 0xFE, 0x28, 0x02, 0x00, 0x0E, 0xFE, 0xFE, 0x02, 0x00, 0xFE, 0x10, 0x52, 0x0C, 0x00, 0x00, 0x00, /* 0000CA90 */ 0x00, 0x2C, 0x00, 0x83, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x4D, 0x00, 0x1E, 0x00, 0x4C, /* 0000CAA0 */ 0x00, 0x7C, 0x00, 0xA0, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x5E, 0x00, 0xAB, -/* 0000CAB0 */ 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, 0x00, 0x43, 0x00, 0x00, 0x3F, 0x7E, -/* 0000CAC0 */ 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xF2, 0x02, 0xFE, 0x9A, 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x01, +/* 0000CAB0 */ 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, 0x00, 0x43, 0x00, 0x00, 0xBF, 0xFC, +/* 0000CAC0 */ 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xF2, 0x02, 0xFE, 0x9A, 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x01, /* 0000CAD0 */ 0x00, 0x22, 0x00, 0xFE, 0x41, 0x47, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, -/* 0000CAE0 */ 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x0A, 0x05, 0x0B, 0x06, 0x29, 0x22, 0x01, 0x04, 0x02, 0x02, -/* 0000CAF0 */ 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CAE0 */ 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x01, 0x0A, 0x05, 0x0B, 0x06, 0x29, 0x22, 0x01, 0x04, 0x02, +/* 0000CAF0 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, /* 0000CB20 */ 0x00, 0x02, 0xFE, 0x1E, 0x03, 0xB2, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0C, @@ -4679,7 +4679,7 @@ namespace Js /* 0000CBE0 */ 0x00, 0x0E, 0xFE, 0x1F, 0x03, 0x00, 0xFE, 0x58, 0x47, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, /* 0000CBF0 */ 0x60, 0x00, 0x09, 0x00, 0x20, 0x00, 0x09, 0x00, 0x23, 0x00, 0x15, 0x00, 0x51, 0x00, 0x14, 0x00, /* 0000CC00 */ 0x41, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x29, 0x00, 0x08, 0x00, -/* 0000CC10 */ 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x02, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, +/* 0000CC10 */ 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x3F, 0xFD, 0x22, 0x04, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, /* 0000CC20 */ 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x1F, 0x00, 0xFE, 0x63, /* 0000CC30 */ 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x63, 0x44, 0xFE, 0xB8, 0x02, 0xFE, /* 0000CC40 */ 0xB8, 0x02, 0x01, 0x06, 0x04, 0x07, 0x08, 0x1C, 0x1C, 0x01, 0x03, 0x06, 0x04, 0xFF, 0xFF, 0xFF, @@ -4695,10 +4695,10 @@ namespace Js /* 0000CCE0 */ 0x08, 0x5C, 0x03, 0x08, 0xEE, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, /* 0000CCF0 */ 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x1C, 0x03, 0x00, 0xFE, /* 0000CD00 */ 0x7A, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x30, 0x00, 0x5A, 0x00, 0x5A, 0x02, 0x0D, -/* 0000CD10 */ 0x00, 0x16, 0x00, 0x00, 0x18, 0xCD, 0x00, 0x00, 0xBF, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x0F, 0xFF, +/* 0000CD10 */ 0x00, 0x16, 0x00, 0x00, 0x18, 0xCD, 0x00, 0x00, 0xBF, 0xFD, 0x3A, 0x04, 0x00, 0xFC, 0x0F, 0xFF, /* 0000CD20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, 0x6B, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x20, 0x00, 0xFE, /* 0000CD30 */ 0x0D, 0x45, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x0D, 0x45, 0xFE, 0xEB, 0x01, -/* 0000CD40 */ 0xFE, 0xEB, 0x01, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, 0x20, 0x02, 0x01, 0x01, 0x03, 0x08, 0x40, +/* 0000CD40 */ 0xFE, 0xEB, 0x01, 0x40, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, 0x20, 0x02, 0x01, 0x01, 0x03, 0x08, /* 0000CD50 */ 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CD60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0xB4, 0x8F, 0x02, 0x00, 0x00, /* 0000CD70 */ 0x00, 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x04, 0x00, 0x00, 0x96, 0x02, @@ -4714,20 +4714,20 @@ namespace Js /* 0000CE10 */ 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x9D, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, /* 0000CE20 */ 0x00, 0x00, 0xFE, 0x77, 0x01, 0xFE, 0x1D, 0x03, 0x00, 0xFE, 0x2E, 0x45, 0x05, 0x00, 0x00, 0x00, /* 0000CE30 */ 0x00, 0x18, 0x00, 0x43, 0x00, 0x28, 0x00, 0x37, 0x00, 0x56, 0x00, 0x28, 0x01, 0x1C, 0x00, 0x27, -/* 0000CE40 */ 0x00, 0x00, 0x46, 0xCE, 0x00, 0x00, 0x3F, 0x6E, 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, +/* 0000CE40 */ 0x00, 0x00, 0x46, 0xCE, 0x00, 0x00, 0xBF, 0xDC, 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, /* 0000CE50 */ 0xFF, 0xFF, 0xFE, 0x8E, 0x01, 0x56, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x21, 0x00, 0xFE, 0xF2, 0x45, -/* 0000CE60 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x04, 0x03, 0x06, 0x0A, -/* 0000CE70 */ 0x09, 0x03, 0x01, 0x01, 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CE60 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x41, 0x04, 0x03, 0x06, +/* 0000CE70 */ 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xBB, 0x02, 0x33, 0x8F, 0x01, 0x00, 0x00, /* 0000CEA0 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, /* 0000CEB0 */ 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0000CEC0 */ 0x00, 0x00, 0x06, 0x01, 0x00, 0x9D, 0x03, 0x06, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000CED0 */ 0x00, 0x00, 0xFE, 0x19, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, -/* 0000CEE0 */ 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, +/* 0000CEE0 */ 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, /* 0000CEF0 */ 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1E, 0x00, 0xFE, 0xFA, -/* 0000CF00 */ 0x3B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFA, 0x3B, 0xD0, 0xD0, 0x07, 0x06, 0x0B, -/* 0000CF10 */ 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CF00 */ 0x3B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFA, 0x3B, 0xD0, 0xD0, 0x0B, 0x07, 0x06, +/* 0000CF10 */ 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, /* 0000CF40 */ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, @@ -4737,10 +4737,10 @@ namespace Js /* 0000CF80 */ 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0C, /* 0000CF90 */ 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, /* 0000CFA0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x18, 0x3C, 0x03, -/* 0000CFB0 */ 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x67, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000CFC0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5B, 0x01, 0x89, 0xFF, 0xA2, 0x41, +/* 0000CFB0 */ 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x67, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000CFC0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5B, 0x01, 0x89, 0xFF, 0xA2, 0x41, /* 0000CFD0 */ 0x31, 0x00, 0x1D, 0x00, 0xFE, 0x55, 0x38, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x55, -/* 0000CFE0 */ 0x38, 0xCE, 0xCE, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, +/* 0000CFE0 */ 0x38, 0xCE, 0xCE, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, /* 0000CFF0 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D000 */ 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D010 */ 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, @@ -4751,10 +4751,10 @@ namespace Js /* 0000D060 */ 0x00, 0x33, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, /* 0000D070 */ 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000D080 */ 0xF0, 0x00, 0xFE, 0x73, 0x38, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, -/* 0000D090 */ 0x65, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 0000D090 */ 0x65, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 0000D0A0 */ 0x4F, 0x01, 0x81, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1C, 0x00, 0xFE, 0xC0, 0x34, 0xFF, 0x00, 0x10, -/* 0000D0B0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, -/* 0000D0C0 */ 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D0B0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, +/* 0000D0C0 */ 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, /* 0000D0F0 */ 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, 0x62, 0x0B, 0x07, @@ -4764,10 +4764,10 @@ namespace Js /* 0000D130 */ 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, /* 0000D140 */ 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, /* 0000D150 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0xDE, 0x34, 0x03, 0x07, 0x00, 0x00, 0x00, -/* 0000D160 */ 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, +/* 0000D160 */ 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, /* 0000D170 */ 0xFE, 0xAA, 0x02, 0xFE, 0x33, 0x01, 0x1D, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x1B, 0x00, 0xFE, 0x5D, /* 0000D180 */ 0x2F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x5D, 0x2F, 0xFE, 0x7E, 0x03, 0xFE, 0x7E, -/* 0000D190 */ 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, 0x07, 0x01, 0x05, 0x05, 0x05, 0x05, 0xFF, +/* 0000D190 */ 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, 0x07, 0x05, 0x05, 0x05, 0x05, 0xFF, /* 0000D1A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, /* 0000D1B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000D1C0 */ 0x04, 0x02, 0xFE, 0x0D, 0x03, 0x02, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x1A, @@ -4800,10 +4800,10 @@ namespace Js /* 0000D370 */ 0xF5, 0x01, 0xFE, 0xF7, 0x01, 0x00, 0xFE, 0x9A, 0x2F, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, /* 0000D380 */ 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x07, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x26, 0x00, /* 0000D390 */ 0x39, 0x00, 0x10, 0x00, 0x4B, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x13, 0x00, 0x4D, 0x00, 0x6E, 0x00, -/* 0000D3A0 */ 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, +/* 0000D3A0 */ 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, /* 0000D3B0 */ 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x1A, 0x00, 0xFE, 0x60, 0x2D, 0xFF, -/* 0000D3C0 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x60, 0x2D, 0xFE, 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x08, -/* 0000D3D0 */ 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, +/* 0000D3C0 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x60, 0x2D, 0xFE, 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x01, +/* 0000D3D0 */ 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, /* 0000D3E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, /* 0000D3F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, /* 0000D400 */ 0xFE, 0xA6, 0x02, 0x04, 0xB9, 0x14, 0x0D, 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, 0xA8, 0x0B, 0x14, @@ -4820,7 +4820,7 @@ namespace Js /* 0000D4B0 */ 0x08, 0xEE, 0x03, 0x00, 0x0B, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000D4C0 */ 0xFE, 0x26, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x2F, 0x02, 0x00, 0xFE, 0x9B, 0x2D, 0x07, 0x00, 0x00, /* 0000D4D0 */ 0x00, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x43, 0x00, 0x26, 0x00, 0x39, 0x00, 0x16, 0x00, -/* 0000D4E0 */ 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, 0x00, 0x32, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, +/* 0000D4E0 */ 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, 0x00, 0x32, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, /* 0000D4F0 */ 0xFC, 0x0F, 0xFE, 0xCC, 0x02, 0xFE, 0x12, 0x01, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x18, 0x00, /* 0000D500 */ 0xFE, 0xB8, 0x29, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB8, 0x29, 0xFE, 0x80, /* 0000D510 */ 0x03, 0xFE, 0x80, 0x03, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, 0x01, 0x02, 0x01, 0x05, 0x03, @@ -4843,10 +4843,10 @@ namespace Js /* 0000D620 */ 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x03, 0xFE, 0x16, 0x03, 0xFE, 0x17, 0x03, 0xFE, /* 0000D630 */ 0x18, 0x03, 0x00, 0xFE, 0x0C, 0x2A, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x06, /* 0000D640 */ 0x00, 0x18, 0x00, 0x33, 0x00, 0x7C, 0x02, 0x4C, 0x00, 0x69, 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, -/* 0000D650 */ 0x54, 0xD6, 0x00, 0x00, 0x3F, 0x7E, 0x01, 0x0B, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D650 */ 0x54, 0xD6, 0x00, 0x00, 0xBF, 0xFC, 0x02, 0x06, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D660 */ 0xFE, 0x15, 0x01, 0x41, 0xFF, 0xB2, 0x41, 0x11, 0x00, 0x19, 0x00, 0xFE, 0x77, 0x2A, 0xFF, 0x00, -/* 0000D670 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x77, 0x2A, 0xFE, 0x37, 0x02, 0xFE, 0x37, 0x02, 0x08, 0x0B, -/* 0000D680 */ 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x45, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0xFF, 0xFF, +/* 0000D670 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x77, 0x2A, 0xFE, 0x37, 0x02, 0xFE, 0x37, 0x02, 0x45, 0x08, +/* 0000D680 */ 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0xFF, 0xFF, /* 0000D690 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, /* 0000D6A0 */ 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x02, 0xFE, 0xA9, 0x02, /* 0000D6B0 */ 0x02, 0xFE, 0xC3, 0x02, 0x09, 0x02, 0xFE, 0xC5, 0x02, 0x02, 0xFE, 0xC4, 0x02, 0x08, 0x03, 0x01, @@ -4870,7 +4870,7 @@ namespace Js /* 0000D7D0 */ 0x00, 0xFE, 0xED, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x7F, 0x01, /* 0000D7E0 */ 0x00, 0xFE, 0xAF, 0x2A, 0x07, 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x5F, 0x00, 0x0B, 0x00, 0x2C, /* 0000D7F0 */ 0x00, 0x5A, 0x00, 0x8E, 0x00, 0x20, 0x00, 0x35, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x92, -/* 0000D800 */ 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0xCB, 0x02, 0xED, 0x04, 0xFF, 0xA3, +/* 0000D800 */ 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0xCB, 0x02, 0xED, 0x04, 0xFF, 0xA3, /* 0000D810 */ 0x41, 0x01, 0x00, 0x16, 0x00, 0xFE, 0x5B, 0x25, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, /* 0000D820 */ 0xFE, 0x5B, 0x25, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x01, 0x08, 0x05, 0x0A, 0x05, 0x29, 0x26, /* 0000D830 */ 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0x09, @@ -4891,10 +4891,10 @@ namespace Js /* 0000D920 */ 0x11, 0x03, 0x00, 0xFE, 0x8F, 0x25, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, /* 0000D930 */ 0x00, 0x21, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x26, 0x00, 0x2F, 0x00, 0x2A, /* 0000D940 */ 0x00, 0x71, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x27, 0x00, 0xA5, 0x02, 0x0D, 0x00, 0x12, 0x00, 0x00, -/* 0000D950 */ 0x54, 0xD9, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D950 */ 0x54, 0xD9, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D960 */ 0xFC, 0x22, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x17, 0x00, 0xFE, 0x12, 0x27, 0xFF, 0x00, 0x10, 0x01, -/* 0000D970 */ 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x06, 0x08, 0x0B, 0x06, -/* 0000D980 */ 0x49, 0x47, 0x02, 0x08, 0x07, 0x41, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D970 */ 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x41, 0x06, 0x08, 0x0B, +/* 0000D980 */ 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D990 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D9A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x08, 0x03, 0x02, /* 0000D9B0 */ 0xFE, 0x12, 0x03, 0x03, 0x02, 0xFE, 0x13, 0x03, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, @@ -4925,10 +4925,10 @@ namespace Js /* 0000DB40 */ 0x00, 0x00, 0xFE, 0x24, 0x02, 0xFE, 0x29, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0x2E, 0x02, 0xFE, 0xF5, /* 0000DB50 */ 0x01, 0x00, 0xFE, 0x33, 0x27, 0x09, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x66, 0x00, 0x25, 0x00, /* 0000DB60 */ 0x4A, 0x00, 0x26, 0x00, 0x34, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x4E, 0x00, 0x26, 0x00, -/* 0000DB70 */ 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, 0x00, 0x4A, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, +/* 0000DB70 */ 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, 0x00, 0x4A, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, /* 0000DB80 */ 0xFC, 0x07, 0xFE, 0xCA, 0x02, 0xE6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x15, 0x00, 0xFE, 0x35, -/* 0000DB90 */ 0x24, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x24, 0xA6, 0xA6, 0x05, 0x03, 0x05, -/* 0000DBA0 */ 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000DB90 */ 0x24, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x24, 0xA6, 0xA6, 0x01, 0x05, 0x03, +/* 0000DBA0 */ 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x63, 0x8F, 0x01, /* 0000DBD0 */ 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x02, @@ -4938,10 +4938,10 @@ namespace Js /* 0000DC10 */ 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x02, 0x07, 0xF2, 0x03, 0x05, 0x05, /* 0000DC20 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x05, 0x02, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000DC30 */ 0x00, 0x00, 0x00, 0xFE, 0x29, 0x02, 0xFE, 0x05, 0x02, 0x00, 0xFE, 0x68, 0x24, 0x03, 0x00, 0x00, -/* 0000DC40 */ 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, 0x00, 0x47, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, +/* 0000DC40 */ 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, 0x00, 0x47, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, /* 0000DC50 */ 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xD6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x14, 0x00, 0xFE, 0xDE, /* 0000DC60 */ 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xDE, 0x21, 0xFE, 0x4F, 0x02, 0xFE, 0x4F, -/* 0000DC70 */ 0x02, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, 0x06, 0x05, 0x01, 0x03, 0x03, 0x03, 0x03, +/* 0000DC70 */ 0x02, 0x01, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, 0x06, 0x05, 0x03, 0x03, 0x03, 0x03, /* 0000DC80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, /* 0000DC90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000DCA0 */ 0x00, 0x02, 0xFE, 0x0D, 0x03, 0x04, 0x02, 0xFE, 0x0E, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, @@ -4965,10 +4965,10 @@ namespace Js /* 0000DDC0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0xFE, 0x2B, 0x02, 0x23, 0x00, 0xFE, /* 0000DDD0 */ 0x31, 0x22, 0x08, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x26, /* 0000DDE0 */ 0x00, 0x41, 0x00, 0x32, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x90, 0x00, 0x29, 0x00, 0x42, 0x00, 0x08, -/* 0000DDF0 */ 0x00, 0x21, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC8, 0x02, 0xBC, 0x04, +/* 0000DDF0 */ 0x00, 0x21, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC8, 0x02, 0xBC, 0x04, /* 0000DE00 */ 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x13, 0x00, 0xFE, 0xA7, 0x1E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, -/* 0000DE10 */ 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, 0xFE, 0x2F, 0x03, 0x0B, 0x0A, 0x11, 0x0A, 0x50, 0x4A, -/* 0000DE20 */ 0x01, 0x01, 0x08, 0x06, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000DE10 */ 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, 0xFE, 0x2F, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x50, +/* 0000DE20 */ 0x4A, 0x01, 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x07, 0x03, 0x02, 0xFE, /* 0000DE50 */ 0x08, 0x03, 0x02, 0xFE, 0x09, 0x03, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xFE, 0x0A, 0x03, @@ -5001,7 +5001,7 @@ namespace Js /* 0000E000 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x08, 0x00, 0x2A, 0x00, /* 0000E010 */ 0x26, 0x00, 0x48, 0x00, 0x08, 0x00, 0x29, 0x00, 0x26, 0x00, 0x40, 0x00, 0x08, 0x00, 0x29, 0x00, /* 0000E020 */ 0x26, 0x00, 0x40, 0x00, 0x3F, 0x00, 0x6C, 0x00, 0x96, 0x00, 0xA9, 0x00, 0x06, 0x00, 0x24, 0x00, -/* 0000E030 */ 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x02, 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E030 */ 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E040 */ 0xFF, 0x8D, 0x14, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x0C, 0x00, 0xFE, 0x1B, 0x19, 0x06, 0xFF, 0x00, /* 0000E050 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x1B, 0x19, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, 0x05, 0x04, 0x0A, /* 0000E060 */ 0x0B, 0x04, 0x1D, 0x1D, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, @@ -5023,10 +5023,10 @@ namespace Js /* 0000E160 */ 0x03, 0xFE, 0x29, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x06, 0x03, /* 0000E170 */ 0x00, 0xFE, 0x32, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0xF2, 0x04, 0x00, 0x8B, 0xE5, /* 0000E180 */ 0x00, 0x00, 0xF5, 0xE4, 0x00, 0x00, 0x5F, 0xE4, 0x00, 0x00, 0xC9, 0xE3, 0x00, 0x00, 0x78, 0xE2, -/* 0000E190 */ 0x00, 0x00, 0x96, 0xE1, 0x00, 0x00, 0x3F, 0xFE, 0x11, 0x0E, 0x00, 0xFC, 0x07, 0xFE, 0x06, 0x03, +/* 0000E190 */ 0x00, 0x00, 0x96, 0xE1, 0x00, 0x00, 0xBF, 0xFC, 0x23, 0x0C, 0x00, 0xFC, 0x07, 0xFE, 0x06, 0x03, /* 0000E1A0 */ 0xAC, 0x19, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x12, 0x00, 0xFE, 0xCF, 0x1C, 0xFF, 0x00, 0x10, 0x01, -/* 0000E1B0 */ 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x05, 0x04, 0x07, 0x05, -/* 0000E1C0 */ 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E1B0 */ 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x05, 0x04, 0x07, +/* 0000E1C0 */ 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x6A, 0x00, 0x04, 0x08, 0x6E, 0xEB, 0x00, /* 0000E1F0 */ 0xEC, 0x00, 0x0F, 0x03, 0x00, 0x04, 0x09, 0x5D, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, @@ -5037,10 +5037,10 @@ namespace Js /* 0000E240 */ 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x07, 0x07, 0x01, 0x00, /* 0000E250 */ 0x47, 0x04, 0x07, 0x09, 0x9A, 0xFF, 0xED, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, /* 0000E260 */ 0x26, 0x1D, 0x05, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x55, 0x00, 0x08, -/* 0000E270 */ 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x51, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 0000E270 */ 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0xA2, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 0000E280 */ 0x05, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x11, 0x00, 0xFE, 0xAF, 0x1B, 0xFF, 0x00, -/* 0000E290 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAF, 0x1B, 0xFE, 0x02, 0x01, 0xFE, 0x02, 0x01, 0x09, 0x06, -/* 0000E2A0 */ 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, +/* 0000E290 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAF, 0x1B, 0xFE, 0x02, 0x01, 0xFE, 0x02, 0x01, 0x01, 0x09, +/* 0000E2A0 */ 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, /* 0000E2B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0xFF, 0xFF, 0xFF, /* 0000E2C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x01, /* 0000E2D0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0xC8, 0x8F, @@ -5058,38 +5058,38 @@ namespace Js /* 0000E390 */ 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, /* 0000E3A0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1B, 0x29, 0x00, 0xFE, 0xCF, 0x1B, 0x06, /* 0000E3B0 */ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x44, 0x00, 0x39, 0x00, -/* 0000E3C0 */ 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, +/* 0000E3C0 */ 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, /* 0000E3D0 */ 0xFE, 0x04, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x10, 0x00, 0xFE, 0x35, 0x1B, 0xFF, -/* 0000E3E0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x1B, 0x5F, 0x5F, 0x03, 0x03, 0x05, 0x03, 0x10, -/* 0000E3F0 */ 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E3E0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x1B, 0x5F, 0x5F, 0x01, 0x03, 0x03, 0x05, 0x03, +/* 0000E3F0 */ 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E400 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E410 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, /* 0000E420 */ 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, /* 0000E430 */ 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, /* 0000E440 */ 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, -/* 0000E450 */ 0x00, 0x00, 0xFE, 0x55, 0x1B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x00, 0x3F, -/* 0000E460 */ 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x03, 0x03, 0x9B, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, +/* 0000E450 */ 0x00, 0x00, 0xFE, 0x55, 0x1B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x00, 0xBF, +/* 0000E460 */ 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x03, 0x03, 0x9B, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, /* 0000E470 */ 0x0F, 0x00, 0xFE, 0xBA, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xBA, 0x1A, 0x58, -/* 0000E480 */ 0x58, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E480 */ 0x58, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E490 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E4A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, /* 0000E4B0 */ 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, 0x05, 0x47, 0x00, 0x05, 0x09, 0x1E, 0x00, /* 0000E4C0 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, /* 0000E4D0 */ 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, /* 0000E4E0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xDA, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0000E4F0 */ 0x35, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x02, 0x03, 0x96, +/* 0000E4F0 */ 0x35, 0x00, 0x37, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x02, 0x03, 0x96, /* 0000E500 */ 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0E, 0x00, 0xFE, 0x3F, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000E510 */ 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, +/* 0000E510 */ 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, /* 0000E520 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E530 */ 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E540 */ 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, /* 0000E550 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, /* 0000E560 */ 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, /* 0000E570 */ 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x5F, -/* 0000E580 */ 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, +/* 0000E580 */ 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, /* 0000E590 */ 0xFC, 0x07, 0xFE, 0x01, 0x03, 0x8F, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0D, 0x00, 0xFE, 0x5F, -/* 0000E5A0 */ 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5F, 0x19, 0xC5, 0xC5, 0x04, 0x04, 0x06, -/* 0000E5B0 */ 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E5A0 */ 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5F, 0x19, 0xC5, 0xC5, 0x01, 0x04, 0x04, +/* 0000E5B0 */ 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x5F, 0x14, /* 0000E5E0 */ 0x03, 0x00, 0x04, 0x02, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, @@ -5099,10 +5099,10 @@ namespace Js /* 0000E620 */ 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x06, 0x06, 0x01, 0x00, 0x47, 0x00, 0x06, 0x09, /* 0000E630 */ 0x05, 0x00, 0xA8, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000E640 */ 0xFE, 0x23, 0x02, 0x00, 0xFE, 0x7F, 0x19, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x27, 0x00, -/* 0000E650 */ 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, +/* 0000E650 */ 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, /* 0000E660 */ 0xFE, 0xE6, 0x02, 0x89, 0x20, 0xFF, 0xA0, 0x41, 0x01, 0x00, 0x0B, 0x00, 0xFE, 0x95, 0x18, 0xFF, -/* 0000E670 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x95, 0x18, 0x6D, 0x6D, 0x05, 0x03, 0x04, 0x06, 0x12, -/* 0000E680 */ 0x12, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E670 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x95, 0x18, 0x6D, 0x6D, 0x01, 0x05, 0x03, 0x04, 0x06, +/* 0000E680 */ 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E690 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E6A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, /* 0000E6B0 */ 0x00, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x6D, 0x04, @@ -5112,10 +5112,10 @@ namespace Js /* 0000E6F0 */ 0x06, 0xF2, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x04, 0x02, 0x00, /* 0000E700 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0xF9, 0x01, /* 0000E710 */ 0x00, 0x09, 0xFE, 0x00, 0x03, 0x00, 0xFE, 0xAC, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, -/* 0000E720 */ 0x55, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0E, 0x0F, 0xFC, 0x07, 0xFE, 0xE5, 0x02, 0x79, 0x19, 0xFF, +/* 0000E720 */ 0x55, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x0C, 0x0F, 0xFC, 0x07, 0xFE, 0xE5, 0x02, 0x79, 0x19, 0xFF, /* 0000E730 */ 0xA2, 0x41, 0x01, 0x00, 0x0A, 0x00, 0xFE, 0xC9, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, -/* 0000E740 */ 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x0C, 0x06, 0x10, 0x06, 0x42, 0x37, 0x18, -/* 0000E750 */ 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E740 */ 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x01, 0x0C, 0x06, 0x10, 0x06, 0x42, 0x37, +/* 0000E750 */ 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E760 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E770 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x7A, 0xD1, 0x00, 0x02, 0xFE, 0xFF, /* 0000E780 */ 0x02, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xA8, @@ -5138,7 +5138,7 @@ namespace Js /* 0000E890 */ 0xF7, 0x01, 0xFE, 0xED, 0x01, 0x00, 0xFE, 0x19, 0x16, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, /* 0000E8A0 */ 0x62, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0F, 0x00, 0x34, 0x00, 0x16, 0x00, 0x3A, 0x00, 0x07, 0x00, /* 0000E8B0 */ 0x0B, 0x00, 0x08, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x6A, 0x00, 0x0E, 0x00, 0x36, 0x00, 0x08, 0x00, -/* 0000E8C0 */ 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x35, 0x02, 0xCF, +/* 0000E8C0 */ 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, 0x00, 0x52, 0x00, 0x00, 0x3F, 0xFD, 0x6A, 0x04, 0xCF, /* 0000E8D0 */ 0xFD, 0x0F, 0xFE, 0xE4, 0x02, 0x5A, 0x1E, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x07, 0x00, 0xFE, 0xD8, /* 0000E8E0 */ 0x0E, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xD8, 0x0E, 0xFE, 0xD4, 0x06, 0xFE, /* 0000E8F0 */ 0xD4, 0x06, 0x03, 0x10, 0x0C, 0x15, 0x09, 0x62, 0x5B, 0x01, 0x01, 0x08, 0x01, 0x09, 0x05, 0x05, @@ -5183,10 +5183,10 @@ namespace Js /* 0000EB60 */ 0xFE, 0x1D, 0x0F, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x37, 0x00, 0x07, 0x00, 0x1C, 0x00, /* 0000EB70 */ 0x33, 0x00, 0x3F, 0x02, 0x3D, 0x00, 0x4A, 0x00, 0x1D, 0x00, 0x39, 0x00, 0x12, 0x00, 0x51, 0x00, /* 0000EB80 */ 0x0B, 0x00, 0x20, 0x00, 0x33, 0x00, 0xBF, 0x01, 0x0B, 0x00, 0x2A, 0x00, 0xBA, 0x00, 0x1F, 0x01, -/* 0000EB90 */ 0x00, 0xD5, 0xEC, 0x00, 0x00, 0x99, 0xEB, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, +/* 0000EB90 */ 0x00, 0xD5, 0xEC, 0x00, 0x00, 0x99, 0xEB, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, /* 0000EBA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x09, 0x00, 0xFE, 0xD4, /* 0000EBB0 */ 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xD4, 0x12, 0xFE, 0x7D, 0x01, 0xFE, 0x7D, -/* 0000EBC0 */ 0x01, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, 0x03, 0x06, 0x41, 0x01, 0x01, 0x01, 0x01, +/* 0000EBC0 */ 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, 0x03, 0x06, 0x01, 0x01, 0x01, 0x01, /* 0000EBD0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBE0 */ 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBF0 */ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x8F, 0x02, @@ -5203,10 +5203,10 @@ namespace Js /* 0000ECA0 */ 0x00, 0x5C, 0x02, 0x0A, 0x5C, 0x03, 0x05, 0xEE, 0x04, 0xFF, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000ECB0 */ 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0x0E, 0xFE, 0xFE, 0x02, 0x00, 0xFE, 0xF9, 0x12, 0x05, /* 0000ECC0 */ 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x7B, 0x00, 0x09, 0x00, 0x25, 0x00, 0x41, 0x00, 0x60, 0x00, -/* 0000ECD0 */ 0x3B, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000ECD0 */ 0x3B, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ECE0 */ 0xFF, 0x5D, 0x3D, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x08, 0x00, 0xFE, 0xA1, 0x0F, 0xFF, 0x00, 0x10, -/* 0000ECF0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x02, -/* 0000ED00 */ 0x01, 0x03, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000ECF0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x41, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, +/* 0000ED00 */ 0x02, 0x01, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED10 */ 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED20 */ 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xF8, 0x02, 0x02, 0xFE, 0xBB, 0x02, 0x04, 0x50, 0x8F, 0x02, /* 0000ED30 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5C, 0x00, 0x04, @@ -5214,10 +5214,10 @@ namespace Js /* 0000ED50 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x5C, 0x02, 0x08, 0x2F, 0x08, /* 0000ED60 */ 0x02, 0x05, 0x5C, 0x03, 0x08, 0x5D, 0x04, 0x03, 0x00, 0x00, 0xEE, 0x05, 0x07, 0x07, 0x00, 0x00, /* 0000ED70 */ 0x94, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, -/* 0000ED80 */ 0x00, 0xFE, 0xB5, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4C, 0x00, 0x00, 0x3F, 0x7E, -/* 0000ED90 */ 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xF5, 0x02, 0x52, 0x1F, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x06, +/* 0000ED80 */ 0x00, 0xFE, 0xB5, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4C, 0x00, 0x00, 0xBF, 0xFC, +/* 0000ED90 */ 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xF5, 0x02, 0x52, 0x1F, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x06, /* 0000EDA0 */ 0x00, 0xFE, 0xA2, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA2, 0x0D, 0xFE, 0x14, -/* 0000EDB0 */ 0x01, 0xFE, 0x14, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0000EDB0 */ 0x01, 0xFE, 0x14, 0x01, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, /* 0000EDC0 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDD0 */ 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDE0 */ 0xFF, 0x00, 0x00, 0x4E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, @@ -5227,29 +5227,29 @@ namespace Js /* 0000EE20 */ 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, /* 0000EE30 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0x01, 0x00, 0xFE, 0xCE, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0000EE40 */ 0x26, 0x00, 0x47, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x25, 0x00, 0x08, 0x00, 0x26, 0x00, -/* 0000EE50 */ 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, +/* 0000EE50 */ 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, /* 0000EE60 */ 0xFE, 0xE3, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x05, 0x00, 0xFE, 0x2B, 0x0D, 0xFF, -/* 0000EE70 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x2B, 0x0D, 0x53, 0x53, 0x05, 0x02, 0x05, 0x04, 0x0B, -/* 0000EE80 */ 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EE70 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x2B, 0x0D, 0x53, 0x53, 0x01, 0x05, 0x02, 0x05, 0x04, +/* 0000EE80 */ 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EEA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x2D, 0x8F, 0x01, 0x00, 0x00, 0x00, /* 0000EEB0 */ 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, /* 0000EEC0 */ 0x06, 0x5C, 0x01, 0x03, 0x5C, 0x02, 0x02, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0000EED0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x73, 0x02, 0x00, 0xFE, 0x49, -/* 0000EEE0 */ 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x00, 0x3F, 0x6E, 0x01, 0x08, 0x0F, +/* 0000EEE0 */ 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x00, 0xBF, 0xDC, 0x02, 0x00, 0x0F, /* 0000EEF0 */ 0xFC, 0x07, 0xFE, 0xE2, 0x02, 0x48, 0x1C, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x04, 0x00, 0xFE, 0x8B, -/* 0000EF00 */ 0x0C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x0C, 0x7F, 0x7F, 0x02, 0x04, 0x05, -/* 0000EF10 */ 0x0A, 0x0A, 0x01, 0x41, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EF00 */ 0x0C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x0C, 0x7F, 0x7F, 0x41, 0x02, 0x04, +/* 0000EF10 */ 0x05, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x05, 0x00, 0x00, /* 0000EF40 */ 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x05, 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1E, /* 0000EF50 */ 0x62, 0x05, 0x04, 0x00, 0x14, 0x0F, 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, 0x62, 0x05, 0x04, 0x00, /* 0000EF60 */ 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000EF70 */ 0xFE, 0x0B, 0x01, 0x00, 0xFE, 0xA4, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4B, 0x00, -/* 0000EF80 */ 0x04, 0x00, 0x1A, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0C, 0x00, 0xFC, 0x07, 0xFE, 0xF4, 0x02, 0x3E, +/* 0000EF80 */ 0x04, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x08, 0x00, 0xFC, 0x07, 0xFE, 0xF4, 0x02, 0x3E, /* 0000EF90 */ 0x12, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x03, 0x00, 0xFE, 0x5B, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000EFA0 */ 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, 0x01, -/* 0000EFB0 */ 0x01, 0x01, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EFA0 */ 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x41, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, +/* 0000EFB0 */ 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x03, 0x2F, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, /* 0000EFE0 */ 0x01, 0x01, 0x00, 0x00, 0x00, 0x33, 0x47, 0x08, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, @@ -5257,10 +5257,10 @@ namespace Js /* 0000F000 */ 0x05, 0x08, 0x00, 0x00, 0x5C, 0x01, 0x0A, 0xEE, 0x02, 0xFF, 0x09, 0x00, 0x00, 0x28, 0x08, 0x08, /* 0000F010 */ 0x09, 0xD8, 0xFF, 0xED, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x83, 0x0B, 0x05, /* 0000F020 */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x23, 0x00, 0x08, 0x00, 0x21, 0x00, 0x18, 0x00, 0x21, 0x00, -/* 0000F030 */ 0x0A, 0x00, 0x1B, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0xD7, 0x02, 0x28, +/* 0000F030 */ 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0xD7, 0x02, 0x28, /* 0000F040 */ 0x1F, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x02, 0x00, 0xFE, 0x22, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000F050 */ 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, -/* 0000F060 */ 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000F050 */ 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x41, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, +/* 0000F060 */ 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F070 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F080 */ 0x00, 0x00, 0x03, 0x04, 0x45, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0000F090 */ 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, 0x5C, 0x02, 0x05, 0x8F, 0x01, 0x00, diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h index de2414f7f6f..9143d6b73a2 100644 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h +++ b/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h @@ -2732,18 +2732,18 @@ namespace Js /* 00005230 */ 0x00, 0x3B, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x8D, 0x1A, 0x01, /* 00005240 */ 0x00, 0x8D, 0x1A, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x8F, 0x1B, 0x01, /* 00005250 */ 0x00, 0x8F, 0x1B, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x1F, 0x1C, 0x01, -/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0x39, 0x6E, -/* 00005270 */ 0x00, 0x08, 0x00, 0xFC, 0x09, 0xFE, 0x9D, 0x02, 0xFE, 0xA8, 0x41, 0x00, 0x00, 0xFE, 0x75, 0x01, +/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0xB9, 0xDC, +/* 00005270 */ 0x00, 0x00, 0x00, 0xFC, 0x09, 0xFE, 0x9D, 0x02, 0xFE, 0xA8, 0x41, 0x00, 0x00, 0xFE, 0x75, 0x01, /* 00005280 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x75, 0x01, 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0xFF, 0xAF, -/* 00005290 */ 0x1A, 0x01, 0x00, 0x01, 0x04, 0x04, 0x05, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005290 */ 0x1A, 0x01, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0x02, 0x07, 0x0C, /* 000052C0 */ 0xA8, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFA, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000052D0 */ 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x10, 0x0A, 0x4F, 0xFC, +/* 000052D0 */ 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x52, 0x00, 0x00, 0xBF, 0xFD, 0x20, 0x04, 0x4F, 0xFC, /* 000052E0 */ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x01, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x01, 0x00, 0xFE, /* 000052F0 */ 0x97, 0x01, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x97, 0x01, 0xFF, 0x89, 0x1A, -/* 00005300 */ 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, 0x01, 0xFE, -/* 00005310 */ 0xA7, 0x01, 0x21, 0x10, 0x40, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005300 */ 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x40, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, 0x01, +/* 00005310 */ 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005320 */ 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005330 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9F, 0x02, 0x02, 0xFE, 0xA0, 0x02, 0x02, 0xFE, 0xA1, 0x02, 0x02, /* 00005340 */ 0xFE, 0xA2, 0x02, 0x03, 0x04, 0x02, 0xFE, 0xA3, 0x02, 0x02, 0xFE, 0xA4, 0x02, 0x02, 0xFE, 0xA5, @@ -2967,7 +2967,7 @@ namespace Js /* 000060E0 */ 0xDB, 0x00, 0x00, 0x05, 0xD8, 0x00, 0x00, 0xEE, 0xD4, 0x00, 0x00, 0xAA, 0xD3, 0x00, 0x00, 0x6C, /* 000060F0 */ 0xD1, 0x00, 0x00, 0x96, 0xD0, 0x00, 0x00, 0xC0, 0xCF, 0x00, 0x00, 0xEA, 0xCE, 0x00, 0x00, 0x1A, /* 00006100 */ 0xCC, 0x00, 0x00, 0xBE, 0xCA, 0x00, 0x00, 0x5F, 0xB2, 0x00, 0x00, 0xD1, 0x99, 0x00, 0x00, 0x13, -/* 00006110 */ 0x61, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 00006110 */ 0x61, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 00006120 */ 0x7F, 0x03, 0x1A, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x33, 0x00, 0xFE, 0x84, 0xAC, 0x0E, 0xFF, 0x00, /* 00006130 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0xAC, 0xFE, 0xAF, 0x6D, 0xFE, 0xAF, 0x6D, 0x01, 0x13, /* 00006140 */ 0x2F, 0x3B, 0x09, 0xD9, 0xD9, 0x01, 0x10, 0x01, 0x09, 0x11, 0x11, 0x11, 0x11, 0x06, 0x02, 0x38, @@ -3089,10 +3089,10 @@ namespace Js /* 00006880 */ 0x00, 0x00, 0x8C, 0x8E, 0x00, 0x00, 0x46, 0x8C, 0x00, 0x00, 0x3B, 0x8A, 0x00, 0x00, 0x92, 0x85, /* 00006890 */ 0x00, 0x00, 0xE7, 0x7B, 0x00, 0x00, 0x67, 0x79, 0x00, 0x00, 0xEB, 0x76, 0x00, 0x00, 0x6F, 0x74, /* 000068A0 */ 0x00, 0x00, 0xB8, 0x71, 0x00, 0x00, 0x0E, 0x6F, 0x00, 0x00, 0xC8, 0x6D, 0x00, 0x00, 0xB2, 0x68, -/* 000068B0 */ 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, 0x4D, 0x05, 0x1B, +/* 000068B0 */ 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, 0x4D, 0x05, 0x1B, /* 000068C0 */ 0xFF, 0xA0, 0x41, 0x03, 0x00, 0x42, 0x00, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 000068D0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, 0xFE, 0x0D, 0x08, 0x03, -/* 000068E0 */ 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x08, 0x20, 0x20, 0x20, 0x20, 0x01, 0x16, +/* 000068D0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, 0xFE, 0x0D, 0x08, 0x08, +/* 000068E0 */ 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x20, 0x20, 0x20, 0x20, 0x01, 0x16, /* 000068F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006900 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0xBD, 0x03, /* 00006910 */ 0x02, 0xFE, 0xC7, 0x02, 0x02, 0xFE, 0xF6, 0x02, 0x02, 0xFE, 0xBE, 0x03, 0x02, 0xFE, 0x4A, 0x03, @@ -3154,10 +3154,10 @@ namespace Js /* 00006C90 */ 0x10, 0x01, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x92, 0x00, /* 00006CA0 */ 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x92, 0x00, 0x13, 0x01, 0xDE, 0x03, /* 00006CB0 */ 0x28, 0x00, 0x3F, 0x00, 0x61, 0x00, 0x5B, 0x01, 0x3B, 0x00, 0x45, 0x00, 0x00, 0xC1, 0x6C, 0x00, -/* 00006CC0 */ 0x00, 0x3F, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x66, 0x05, +/* 00006CC0 */ 0x00, 0xBF, 0xFC, 0x3A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x66, 0x05, /* 00006CD0 */ 0x60, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x43, 0x00, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00006CE0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x04, 0x05, 0x07, 0x05, 0x1A, -/* 00006CF0 */ 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CE0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x41, 0x04, 0x05, 0x07, 0x05, +/* 00006CF0 */ 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xB1, 0x03, 0x02, 0xFE, 0x60, 0x03, /* 00006D20 */ 0x04, 0x90, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, @@ -3170,10 +3170,10 @@ namespace Js /* 00006D90 */ 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, /* 00006DA0 */ 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, 0x08, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x00, /* 00006DB0 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x17, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x68, -/* 00006DC0 */ 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, +/* 00006DC0 */ 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, /* 00006DD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x05, 0x39, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x41, 0x00, 0xFF, /* 00006DE0 */ 0x61, 0x0D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x61, 0x0D, 0x01, 0x00, -/* 00006DF0 */ 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, +/* 00006DF0 */ 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, /* 00006E00 */ 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E10 */ 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E20 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0xBC, 0x03, 0x02, 0xFE, 0xC7, @@ -3190,11 +3190,11 @@ namespace Js /* 00006ED0 */ 0x00, 0x62, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, /* 00006EE0 */ 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x46, 0x02, 0x00, 0xFF, 0x88, 0x0D, 0x01, 0x00, /* 00006EF0 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x26, 0x00, 0x4C, -/* 00006F00 */ 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x7E, -/* 00006F10 */ 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x22, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, +/* 00006F00 */ 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFC, +/* 00006F10 */ 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x22, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, /* 00006F20 */ 0x00, 0x40, 0x00, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00006F30 */ 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0A, 0x09, 0x0D, 0x0A, 0x61, 0x60, -/* 00006F40 */ 0x04, 0x03, 0x0C, 0x06, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006F30 */ 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0B, 0x0A, 0x09, 0x0D, 0x0A, 0x61, +/* 00006F40 */ 0x60, 0x04, 0x03, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006F50 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006F60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 00006F70 */ 0xFE, 0xBC, 0x03, 0x02, 0xFE, 0xC7, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -3233,10 +3233,10 @@ namespace Js /* 00007180 */ 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFF, 0x0E, 0x07, 0x01, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x0B, /* 00007190 */ 0x00, 0x39, 0x00, 0x2A, 0x00, 0x81, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x68, 0x00, 0x2A, /* 000071A0 */ 0x00, 0x83, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x50, 0x00, 0x53, 0x00, 0x20, 0x00, 0x51, 0x00, 0x6D, -/* 000071B0 */ 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 000071B0 */ 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 000071C0 */ 0xC7, 0x02, 0xFE, 0x02, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x3F, 0x00, 0xFF, 0x1B, 0x01, /* 000071D0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1B, 0x01, 0x01, 0x00, 0xFE, 0x69, -/* 000071E0 */ 0x05, 0xFE, 0x69, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, +/* 000071E0 */ 0x05, 0xFE, 0x69, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, /* 000071F0 */ 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007200 */ 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007210 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, @@ -3276,11 +3276,11 @@ namespace Js /* 00007430 */ 0x2D, 0x00, 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, /* 00007440 */ 0x5B, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0xA1, 0x00, 0x26, 0x00, /* 00007450 */ 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, -/* 00007460 */ 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, -/* 00007470 */ 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF5, 0x04, 0x64, 0xFF, +/* 00007460 */ 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, +/* 00007470 */ 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF5, 0x04, 0x64, 0xFF, /* 00007480 */ 0xA0, 0x41, 0x31, 0x00, 0x3E, 0x00, 0xFE, 0x21, 0xFE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00007490 */ 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, -/* 000074A0 */ 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007490 */ 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, +/* 000074A0 */ 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000074B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000074C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 000074D0 */ 0xFE, 0x76, 0x03, 0x02, 0xFE, 0x61, 0x03, 0x04, 0x02, 0xFE, 0xBB, 0x03, 0x01, 0x00, 0x00, 0x00, @@ -3316,10 +3316,10 @@ namespace Js /* 000076B0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, /* 000076C0 */ 0x02, 0x00, 0xFE, 0x40, 0xFE, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 000076D0 */ 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 000076E0 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, +/* 000076E0 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, /* 000076F0 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, 0xA0, 0x41, 0x31, 0x00, /* 00007700 */ 0x3D, 0x00, 0xFE, 0xF9, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xF9, 0xFA, 0xFE, -/* 00007710 */ 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, +/* 00007710 */ 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, /* 00007720 */ 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007730 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007740 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x75, 0x03, 0x02, @@ -3356,10 +3356,10 @@ namespace Js /* 00007930 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0x18, /* 00007940 */ 0xFB, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x45, 0x00, /* 00007950 */ 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, -/* 00007960 */ 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, +/* 00007960 */ 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, /* 00007970 */ 0xFF, 0xFF, 0xFF, 0xFE, 0xDB, 0x04, 0x60, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x3C, 0x00, 0xFE, 0xD7, /* 00007980 */ 0xF7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD7, 0xF7, 0xFE, 0xB4, 0x02, 0xFE, 0xB4, -/* 00007990 */ 0x02, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, +/* 00007990 */ 0x02, 0x0B, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, /* 000079A0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079B0 */ 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079C0 */ 0x00, 0x00, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x74, 0x03, 0x02, 0xFE, 0x61, 0x03, 0x04, @@ -3396,10 +3396,10 @@ namespace Js /* 00007BB0 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0xF6, /* 00007BC0 */ 0xF7, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, 0x6D, 0x00, 0x45, 0x00, /* 00007BD0 */ 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, -/* 00007BE0 */ 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x25, 0x0B, 0x4F, 0xFD, 0x07, 0xFE, 0x81, +/* 00007BE0 */ 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x4A, 0x06, 0x4F, 0xFD, 0x07, 0xFE, 0x81, /* 00007BF0 */ 0x03, 0xFE, 0x58, 0x04, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x3B, 0x00, 0xFE, 0x61, 0xDB, 0xFF, -/* 00007C00 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, 0xFE, 0x04, 0x1C, 0x1C, -/* 00007C10 */ 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, 0x22, 0x0E, 0x45, 0x2B, +/* 00007C00 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, 0xFE, 0x04, 0x1C, 0x45, +/* 00007C10 */ 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, 0x22, 0x0E, 0x2B, /* 00007C20 */ 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C40 */ 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC7, 0x02, 0x08, @@ -3551,10 +3551,10 @@ namespace Js /* 00008560 */ 0x00, 0x04, 0x00, 0x38, 0x00, 0x07, 0x00, 0x5C, 0x00, 0x34, 0x00, 0xE3, 0x00, 0x28, 0x00, 0x48, /* 00008570 */ 0x00, 0x01, 0x00, 0x4C, 0x00, 0x1B, 0x00, 0x7C, 0x01, 0x1D, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x68, /* 00008580 */ 0x00, 0x35, 0x00, 0x83, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x40, -/* 00008590 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0x80, 0x03, 0xFE, 0x1E, 0x04, 0x0C, +/* 00008590 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0x80, 0x03, 0xFE, 0x1E, 0x04, 0x0C, /* 000085A0 */ 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x3A, 0x00, 0xFE, 0xEB, 0xCD, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 000085B0 */ 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, -/* 000085C0 */ 0x03, 0x02, 0x10, 0x07, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000085B0 */ 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x01, 0x07, 0x12, 0x16, 0x06, 0xC8, +/* 000085C0 */ 0xBB, 0x03, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000085D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000085E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xAB, 0x03, 0x04, /* 000085F0 */ 0x02, 0xFE, 0x91, 0x03, 0x03, 0x02, 0xFE, 0xAC, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, @@ -3625,10 +3625,10 @@ namespace Js /* 00008A00 */ 0x91, 0x00, 0x2F, 0x00, 0x77, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x8E, 0x00, 0x0E, 0x00, /* 00008A10 */ 0x3F, 0x00, 0x2C, 0x00, 0x8A, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2C, 0x00, 0x8C, 0x00, 0x0E, 0x00, /* 00008A20 */ 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, -/* 00008A30 */ 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, +/* 00008A30 */ 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, /* 00008A40 */ 0xFC, 0x07, 0xFE, 0x7F, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x39, 0x00, /* 00008A50 */ 0xFE, 0xF7, 0xC8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xF7, 0xC8, 0xFE, 0x81, 0x04, -/* 00008A60 */ 0xFE, 0x81, 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, +/* 00008A60 */ 0xFE, 0x81, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, /* 00008A70 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A80 */ 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A90 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x9B, 0x03, 0x02, 0xFE, 0xA6, 0x03, 0x04, 0x03, 0x02, 0xFE, 0xA7, @@ -3658,10 +3658,10 @@ namespace Js /* 00008C10 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0xFE, 0xAC, 0xC9, 0x0A, 0x00, 0x00, 0x00, /* 00008C20 */ 0x00, 0x49, 0x00, 0x90, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x42, 0x00, 0x01, 0x01, 0x06, 0x00, 0x3C, /* 00008C30 */ 0x00, 0x08, 0x00, 0x6E, 0x00, 0x47, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x33, 0x00, 0x44, 0x00, 0x8D, -/* 00008C40 */ 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x7E, 0x03, +/* 00008C40 */ 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x7E, 0x03, /* 00008C50 */ 0xFE, 0xFC, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x38, 0x00, 0xFE, 0xBE, 0xC3, 0xFF, 0x00, -/* 00008C60 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, 0x2B, 0x05, 0x09, 0x14, -/* 00008C70 */ 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, +/* 00008C60 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, 0x2B, 0x05, 0x01, 0x09, +/* 00008C70 */ 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, /* 00008C80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0xFF, 0xFF, 0xFF, /* 00008C90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00008CA0 */ 0x9B, 0x03, 0x02, 0xFE, 0x9C, 0x03, 0x04, 0x03, 0x02, 0xFE, 0x9D, 0x03, 0x02, 0xFE, 0x9E, 0x03, @@ -3694,10 +3694,10 @@ namespace Js /* 00008E50 */ 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0xFE, /* 00008E60 */ 0x96, 0xC4, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x0D, 0x01, 0x08, 0x00, 0x2B, 0x00, 0x42, /* 00008E70 */ 0x00, 0xF6, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x16, 0x00, 0x48, 0x00, 0x52, 0x00, 0x86, 0x00, 0x08, -/* 00008E80 */ 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x6E, 0x05, 0x0A, +/* 00008E80 */ 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xDC, 0x0A, 0x04, /* 00008E90 */ 0x00, 0xFC, 0x07, 0xFE, 0x7D, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x37, /* 00008EA0 */ 0x00, 0xFE, 0x4E, 0xC2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x4E, 0xC2, 0xEF, 0xEF, -/* 00008EB0 */ 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00008EB0 */ 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008EC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008ED0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x0D, 0x03, 0x02, 0xFE, /* 00008EE0 */ 0xBB, 0x02, 0x02, 0xFE, 0x63, 0x03, 0x34, 0x2C, 0x07, 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, @@ -3705,7 +3705,7 @@ namespace Js /* 00008F00 */ 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, /* 00008F10 */ 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x8A, /* 00008F20 */ 0xC2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x31, 0x00, 0x21, 0x00, -/* 00008F30 */ 0x45, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0x7C, 0x03, 0xFE, 0xB3, 0x03, +/* 00008F30 */ 0x45, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x7C, 0x03, 0xFE, 0xB3, 0x03, /* 00008F40 */ 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x35, 0x00, 0xFE, 0x96, 0xB6, 0x01, 0xFF, 0x00, 0x10, 0x01, /* 00008F50 */ 0x00, 0x02, 0x02, 0xFE, 0x96, 0xB6, 0xFE, 0xC7, 0x09, 0xFE, 0xC7, 0x09, 0x02, 0x06, 0x17, 0x1B, /* 00008F60 */ 0x05, 0xCC, 0xCA, 0x03, 0x0D, 0x02, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, @@ -3793,10 +3793,10 @@ namespace Js /* 00009480 */ 0x58, 0x00, 0x3A, 0x00, 0x60, 0x00, 0x14, 0x00, 0x39, 0x00, 0x37, 0x00, 0x7A, 0x00, 0x13, 0x00, /* 00009490 */ 0x28, 0x00, 0x37, 0x00, 0x5C, 0x00, 0x13, 0x00, 0x31, 0x00, 0x14, 0x00, 0x41, 0x00, 0x3A, 0x00, /* 000094A0 */ 0x63, 0x00, 0x14, 0x00, 0x40, 0x00, 0x37, 0x00, 0x7D, 0x00, 0x44, 0x00, 0x42, 0x01, 0x72, 0x00, -/* 000094B0 */ 0x73, 0x00, 0x00, 0xB7, 0x94, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, +/* 000094B0 */ 0x73, 0x00, 0x00, 0xB7, 0x94, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, /* 000094C0 */ 0xFF, 0xFF, 0xFF, 0xFE, 0xDD, 0x03, 0x55, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x36, 0x00, 0xFE, 0xEC, -/* 000094D0 */ 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, 0xB0, 0x04, 0x03, 0x05, -/* 000094E0 */ 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000094D0 */ 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, 0xB0, 0x41, 0x04, 0x03, +/* 000094E0 */ 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000094F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009500 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, /* 00009510 */ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, 0x00, 0x0F, 0x03, 0x00, @@ -3805,10 +3805,10 @@ namespace Js /* 00009540 */ 0x02, 0x00, 0x5C, 0x01, 0x06, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x03, /* 00009550 */ 0x00, 0x5C, 0x02, 0x06, 0x5C, 0x03, 0x03, 0xEE, 0x04, 0xFF, 0x05, 0x00, 0x00, 0xA8, 0x00, 0x24, /* 00009560 */ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x12, 0xBF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x2D, 0x00, -/* 00009570 */ 0x3B, 0x00, 0x5C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x7B, 0x03, 0xFE, +/* 00009570 */ 0x3B, 0x00, 0x5C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x7B, 0x03, 0xFE, /* 00009580 */ 0x82, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x34, 0x00, 0xFE, 0xDC, 0xAC, 0xFF, 0x00, 0x10, -/* 00009590 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, 0x09, 0x07, 0x15, 0x1A, -/* 000095A0 */ 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x01, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00009590 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, 0x09, 0x01, 0x07, 0x15, +/* 000095A0 */ 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, /* 000095B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, /* 000095C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x08, /* 000095D0 */ 0x02, 0xFE, 0x82, 0x03, 0x02, 0xFE, 0x83, 0x03, 0x09, 0x02, 0xFE, 0x84, 0x03, 0x02, 0xFE, 0x85, @@ -3875,7 +3875,7 @@ namespace Js /* 000099A0 */ 0x10, 0x00, 0x46, 0x00, 0x2A, 0x00, 0x79, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x17, 0x00, 0x58, 0x00, /* 000099B0 */ 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD0, 0x00, 0x40, 0x00, 0xDD, 0x00, 0x17, 0x00, 0x58, 0x00, /* 000099C0 */ 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD1, 0x00, 0x40, 0x00, 0xE0, 0x00, 0x08, 0x00, 0x1D, 0x00, -/* 000099D0 */ 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x90, 0x02, +/* 000099D0 */ 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x90, 0x02, /* 000099E0 */ 0x18, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x2B, 0x00, 0xFE, 0x40, 0x7A, 0x06, 0xFF, 0x00, 0x10, 0x01, /* 000099F0 */ 0x00, 0x01, 0x01, 0xFE, 0x40, 0x7A, 0xFE, 0xA1, 0x31, 0xFE, 0xA1, 0x31, 0x01, 0x0D, 0x22, 0x28, /* 00009A00 */ 0x09, 0xA6, 0xA6, 0x01, 0x0C, 0x01, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0x25, 0xFF, 0xFF, @@ -3964,10 +3964,10 @@ namespace Js /* 00009F30 */ 0x61, 0x00, 0x9A, 0x00, 0x3E, 0x00, 0x49, 0x00, 0x5C, 0x00, 0xA0, 0x00, 0x68, 0x00, 0xD8, 0x04, /* 00009F40 */ 0x7F, 0x00, 0x25, 0x03, 0x0F, 0x00, 0x88, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x86, 0xA9, 0x00, /* 00009F50 */ 0x00, 0xB9, 0xA7, 0x00, 0x00, 0x08, 0xA5, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0xA5, 0xA0, 0x00, -/* 00009F60 */ 0x00, 0x65, 0x9F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00009F60 */ 0x00, 0x65, 0x9F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009F70 */ 0xFF, 0xFE, 0x69, 0x03, 0x39, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x32, 0x00, 0xFE, 0x8F, 0xA8, 0xFF, -/* 00009F80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x05, -/* 00009F90 */ 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, +/* 00009F80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x09, +/* 00009F90 */ 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, /* 00009FA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, /* 00009FB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00009FC0 */ 0x12, 0x03, 0x02, 0xFE, 0x5D, 0x03, 0x02, 0xFE, 0xC6, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, @@ -3984,10 +3984,10 @@ namespace Js /* 0000A070 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, /* 0000A080 */ 0xFE, 0x46, 0x02, 0x00, 0xFE, 0xB6, 0xA8, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 0000A090 */ 0x2A, 0x00, 0x87, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x87, 0x00, -/* 0000A0A0 */ 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, +/* 0000A0A0 */ 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x26, 0x03, 0xFE, /* 0000A0B0 */ 0x53, 0x03, 0x1B, 0xFF, 0xA0, 0x41, 0x03, 0x00, 0x30, 0x00, 0xFE, 0xA2, 0xA3, 0x01, 0xFF, 0x00, -/* 0000A0C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, 0x1A, 0x04, 0x02, 0x06, -/* 0000A0D0 */ 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x08, 0xFF, 0xFF, +/* 0000A0C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, 0x1A, 0x04, 0x08, 0x02, +/* 0000A0D0 */ 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x03, 0x03, 0x03, 0x03, 0x08, 0xFF, 0xFF, /* 0000A0E0 */ 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A0F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x5E, 0x03, 0x02, 0xFE, /* 0000A100 */ 0xC6, 0x02, 0x03, 0x04, 0xFE, 0x48, 0x01, 0x5B, 0x07, 0xB4, 0x07, 0x07, 0x2C, 0x0B, 0x07, 0x15, @@ -4014,10 +4014,10 @@ namespace Js /* 0000A250 */ 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x5F, 0x03, 0xFE, 0xEB, 0x01, /* 0000A260 */ 0x00, 0xFE, 0xD8, 0xA3, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8E, /* 0000A270 */ 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x90, 0x00, 0x28, 0x00, 0x49, -/* 0000A280 */ 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x8E, 0xA2, 0x00, 0x00, 0x3F, 0x6E, -/* 0000A290 */ 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, 0x03, 0x48, 0xFF, 0xA2, +/* 0000A280 */ 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x8E, 0xA2, 0x00, 0x00, 0xBF, 0xDC, +/* 0000A290 */ 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, 0x03, 0x48, 0xFF, 0xA2, /* 0000A2A0 */ 0x41, 0x11, 0x00, 0x31, 0x00, 0xFE, 0x62, 0xA6, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0000A2B0 */ 0x62, 0xA6, 0xFC, 0xFC, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x02, 0x41, 0xFF, 0xFF, +/* 0000A2B0 */ 0x62, 0xA6, 0xFC, 0xFC, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x02, 0xFF, 0xFF, /* 0000A2C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, /* 0000A2D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A2E0 */ 0xFE, 0x60, 0x03, 0x02, 0xFE, 0x0D, 0x03, 0x48, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, @@ -4026,10 +4026,10 @@ namespace Js /* 0000A310 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x04, /* 0000A320 */ 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, /* 0000A330 */ 0x00, 0x00, 0x00, 0xFE, 0x93, 0xA6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x5B, 0x00, 0x2A, -/* 0000A340 */ 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x37, +/* 0000A340 */ 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x54, 0x03, 0xFE, 0x37, /* 0000A350 */ 0x03, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x2F, 0x00, 0xFE, 0xAA, 0x9C, 0xFF, 0x00, 0x10, 0x01, -/* 0000A360 */ 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, 0x08, 0x07, 0x0B, 0x07, -/* 0000A370 */ 0x3D, 0x39, 0x04, 0x06, 0x03, 0x09, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A360 */ 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, 0x09, 0x08, 0x07, 0x0B, +/* 0000A370 */ 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A380 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A390 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 0000A3A0 */ 0xFE, 0x5D, 0x03, 0x02, 0xFE, 0xC6, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFE, 0x21, 0x01, @@ -4054,10 +4054,10 @@ namespace Js /* 0000A4D0 */ 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x39, 0x02, 0xFE, /* 0000A4E0 */ 0xFB, 0x01, 0x00, 0xFE, 0xD4, 0x9C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x26, 0x00, 0x31, 0x00, 0x0B, /* 0000A4F0 */ 0x00, 0x39, 0x00, 0x2A, 0x00, 0x7F, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, -/* 0000A500 */ 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 0000A500 */ 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 0000A510 */ 0xC6, 0x02, 0xFE, 0x15, 0x03, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x2E, 0x00, 0xFE, 0xEB, 0x96, /* 0000A520 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0x96, 0xFE, 0x64, 0x05, 0xFE, 0x64, 0x05, -/* 0000A530 */ 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, +/* 0000A530 */ 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, /* 0000A540 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, /* 0000A550 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000A560 */ 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, @@ -4097,10 +4097,10 @@ namespace Js /* 0000A780 */ 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x59, 0x00, 0x26, 0x00, 0x3A, 0x00, /* 0000A790 */ 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9F, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, /* 0000A7A0 */ 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x42, 0x00, 0x66, 0x00, -/* 0000A7B0 */ 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, +/* 0000A7B0 */ 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, /* 0000A7C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x2D, 0x00, /* 0000A7D0 */ 0xFE, 0x36, 0x94, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x36, 0x94, 0xFE, 0x73, 0x02, -/* 0000A7E0 */ 0xFE, 0x73, 0x02, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, 0x06, 0x0B, 0x03, 0x03, +/* 0000A7E0 */ 0xFE, 0x73, 0x02, 0x0B, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, 0x06, 0x03, 0x03, /* 0000A7F0 */ 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A800 */ 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A810 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x09, 0x03, 0x02, 0xFE, 0x47, 0x03, 0x02, 0xFE, 0x46, @@ -4126,10 +4126,10 @@ namespace Js /* 0000A950 */ 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x2A, /* 0000A960 */ 0x02, 0xFE, 0xFB, 0x01, 0x00, 0xFE, 0x59, 0x94, 0x07, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x58, /* 0000A970 */ 0x00, 0x2A, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x3F, 0x00, 0x2F, 0x00, 0x58, 0x00, 0x26, 0x00, 0x8F, -/* 0000A980 */ 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0x3F, 0x7E, 0x21, 0x0B, 0x0F, 0xFD, 0x07, 0xFE, 0x56, 0x03, +/* 0000A980 */ 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0xBF, 0xFC, 0x42, 0x06, 0x0F, 0xFD, 0x07, 0xFE, 0x56, 0x03, /* 0000A990 */ 0xFE, 0x94, 0x02, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x2C, 0x00, 0xFE, 0x9C, 0x7A, 0xFF, 0x00, -/* 0000A9A0 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, 0x34, 0x19, 0x18, 0x23, -/* 0000A9B0 */ 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, 0x45, 0x1E, 0x1E, 0x1E, +/* 0000A9A0 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, 0x34, 0x19, 0x45, 0x18, +/* 0000A9B0 */ 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, 0x1E, 0x1E, 0x1E, /* 0000A9C0 */ 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9D0 */ 0xFF, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A9E0 */ 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC6, 0x02, 0x08, 0x02, 0xFE, 0x0D, @@ -4268,7 +4268,7 @@ namespace Js /* 0000B230 */ 0x51, 0x00, 0x0A, 0x00, 0x43, 0x00, 0x04, 0x00, 0x59, 0x00, 0x04, 0x00, 0x68, 0x00, 0x04, 0x00, /* 0000B240 */ 0x41, 0x00, 0x07, 0x00, 0xAD, 0x00, 0x25, 0x00, 0x4E, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1B, 0x00, /* 0000B250 */ 0x6F, 0x01, 0x1D, 0x00, 0x4D, 0x00, 0x35, 0x00, 0x7F, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, -/* 0000B260 */ 0x7E, 0x11, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, +/* 0000B260 */ 0xFC, 0x22, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, /* 0000B270 */ 0xA0, 0x41, 0x11, 0x00, 0x23, 0x00, 0xFE, 0xA2, 0x49, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, /* 0000B280 */ 0x01, 0xFE, 0xA2, 0x49, 0xFE, 0x43, 0x30, 0xFE, 0x43, 0x30, 0x0B, 0x17, 0x1B, 0x09, 0x99, 0x99, /* 0000B290 */ 0x01, 0x0C, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -4350,11 +4350,11 @@ namespace Js /* 0000B750 */ 0x41, 0x00, 0x2C, 0x00, 0x67, 0x03, 0x54, 0x00, 0x95, 0x00, 0x61, 0x00, 0x92, 0x00, 0x3E, 0x00, /* 0000B760 */ 0x47, 0x00, 0x5C, 0x00, 0x98, 0x00, 0x68, 0x00, 0xBD, 0x05, 0x7F, 0x00, 0x12, 0x03, 0x0F, 0x00, /* 0000B770 */ 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x79, 0xC1, 0x00, 0x00, 0x58, 0xBF, 0x00, 0x00, 0xA7, -/* 0000B780 */ 0xBC, 0x00, 0x00, 0xBD, 0xBA, 0x00, 0x00, 0xCF, 0xB8, 0x00, 0x00, 0x8F, 0xB7, 0x00, 0x00, 0x3F, -/* 0000B790 */ 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, +/* 0000B780 */ 0xBC, 0x00, 0x00, 0xBD, 0xBA, 0x00, 0x00, 0xCF, 0xB8, 0x00, 0x00, 0x8F, 0xB7, 0x00, 0x00, 0xBF, +/* 0000B790 */ 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, /* 0000B7A0 */ 0xA0, 0x41, 0x11, 0x00, 0x2A, 0x00, 0xFE, 0xAC, 0x76, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000B7B0 */ 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, -/* 0000B7C0 */ 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B7B0 */ 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, +/* 0000B7C0 */ 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x44, 0x03, /* 0000B7F0 */ 0x02, 0xFE, 0xC2, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, @@ -4370,11 +4370,11 @@ namespace Js /* 0000B890 */ 0x00, 0x00, 0x02, 0x00, 0x62, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000B8A0 */ 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0x00, 0xFE, 0xD3, /* 0000B8B0 */ 0x76, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x26, 0x00, -/* 0000B8C0 */ 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x09, 0x00, 0x39, 0x00, 0x00, 0x3F, -/* 0000B8D0 */ 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x26, 0x03, 0xFE, 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, +/* 0000B8C0 */ 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, 0x09, 0x00, 0x39, 0x00, 0x00, 0xBF, +/* 0000B8D0 */ 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x26, 0x03, 0xFE, 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, /* 0000B8E0 */ 0x03, 0x00, 0x29, 0x00, 0xFE, 0xD8, 0x70, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, -/* 0000B8F0 */ 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x05, 0x0D, 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, -/* 0000B900 */ 0x09, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B8F0 */ 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x09, 0x05, 0x0D, 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, +/* 0000B900 */ 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B910 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B920 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x45, 0x03, 0x02, /* 0000B930 */ 0xFE, 0xC2, 0x02, 0x02, 0xFE, 0xF6, 0x02, 0x02, 0xFE, 0x2C, 0x03, 0x02, 0xFE, 0x2F, 0x03, 0x02, @@ -4401,10 +4401,10 @@ namespace Js /* 0000BA80 */ 0xFE, 0xEE, 0x01, 0xFE, 0x40, 0x02, 0xFE, 0xF0, 0x01, 0xFE, 0x43, 0x02, 0xFE, 0x3E, 0x03, 0xFE, /* 0000BA90 */ 0x42, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x35, 0x03, 0x00, 0xFE, 0x0E, 0x71, 0x07, /* 0000BAA0 */ 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x86, 0x00, 0x26, 0x00, 0x4C, 0x00, -/* 0000BAB0 */ 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, 0xCF, 0x02, 0x00, 0x3F, 0x7E, 0x11, -/* 0000BAC0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x27, 0x03, 0xFE, 0x4C, 0x02, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, +/* 0000BAB0 */ 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, 0xCF, 0x02, 0x00, 0xBF, 0xFC, 0x22, +/* 0000BAC0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x27, 0x03, 0xFE, 0x4C, 0x02, 0x10, 0xFF, 0xA3, 0x41, 0x01, 0x00, /* 0000BAD0 */ 0x28, 0x00, 0xFE, 0x63, 0x6B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, -/* 0000BAE0 */ 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x06, 0x0B, 0x0B, 0x44, 0x41, 0x03, 0x07, 0x03, 0x09, 0x08, +/* 0000BAE0 */ 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x09, 0x06, 0x0B, 0x0B, 0x44, 0x41, 0x03, 0x07, 0x03, 0x08, /* 0000BAF0 */ 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB00 */ 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB10 */ 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, 0xFE, 0x44, 0x03, 0x02, 0xFE, 0xC2, 0x02, @@ -4432,10 +4432,10 @@ namespace Js /* 0000BC70 */ 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x42, 0x02, 0x00, 0xFE, 0x91, /* 0000BC80 */ 0x6B, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x26, 0x00, /* 0000BC90 */ 0x48, 0x00, 0x15, 0x00, 0x62, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, -/* 0000BCA0 */ 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC2, +/* 0000BCA0 */ 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC2, /* 0000BCB0 */ 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x21, 0x00, 0x27, 0x00, 0xFE, 0x3A, 0x65, 0xFF, -/* 0000BCC0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0A, -/* 0000BCD0 */ 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, +/* 0000BCC0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0B, +/* 0000BCD0 */ 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, /* 0000BCE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, /* 0000BCF0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000BD00 */ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x04, @@ -4475,10 +4475,10 @@ namespace Js /* 0000BF20 */ 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x55, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, /* 0000BF30 */ 0x00, 0x39, 0x00, 0x25, 0x00, 0x9B, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, /* 0000BF40 */ 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x79, 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, -/* 0000BF50 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, +/* 0000BF50 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, /* 0000BF60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, 0x41, 0x31, 0x00, 0x26, 0x00, 0xFE, /* 0000BF70 */ 0x19, 0x61, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, -/* 0000BF80 */ 0xDD, 0x03, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, 0x08, 0x05, 0x0B, 0x07, 0x07, 0x07, +/* 0000BF80 */ 0xDD, 0x03, 0x0B, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, 0x08, 0x05, 0x07, 0x07, 0x07, /* 0000BF90 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFA0 */ 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFB0 */ 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x21, 0x03, 0x04, 0x01, 0x01, 0x00, @@ -4509,11 +4509,11 @@ namespace Js /* 0000C140 */ 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x42, 0x02, 0x00, 0xFE, 0x3C, 0x61, 0x0B, 0x09, 0x00, 0x00, 0x00, /* 0000C150 */ 0x09, 0x00, 0x2E, 0x00, 0x12, 0x00, 0x44, 0x00, 0x28, 0x00, 0x77, 0x00, 0x08, 0x00, 0x2E, 0x00, /* 0000C160 */ 0x20, 0x00, 0xF1, 0x00, 0x1E, 0x00, 0x31, 0x00, 0x1E, 0x00, 0x2E, 0x00, 0x23, 0x00, 0x46, 0x00, -/* 0000C170 */ 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, 0x7E, 0x25, 0x0B, 0x0F, 0xFD, 0x0F, +/* 0000C170 */ 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, 0xFD, 0x4A, 0x06, 0x0F, 0xFD, 0x0F, /* 0000C180 */ 0xFE, 0x2A, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, 0x01, 0x00, 0x24, 0x00, 0xFE, 0xFE, /* 0000C190 */ 0x49, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, -/* 0000C1A0 */ 0xB6, 0x16, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, -/* 0000C1B0 */ 0x44, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, +/* 0000C1A0 */ 0xB6, 0x16, 0x44, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, +/* 0000C1B0 */ 0x0F, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, /* 0000C1C0 */ 0xFF, 0xFF, 0xFF, 0x35, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x12, 0x03, 0x02, /* 0000C1D0 */ 0xFE, 0x2B, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x02, 0x08, 0x02, 0xFE, 0x0D, 0x03, 0x03, 0x02, 0xFE, /* 0000C1E0 */ 0x1A, 0x03, 0x02, 0xFE, 0x08, 0x03, 0x02, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, @@ -4613,11 +4613,11 @@ namespace Js /* 0000C7C0 */ 0x0A, 0x00, 0x36, 0x00, 0x03, 0x00, 0x3F, 0x00, 0x12, 0x00, 0x1B, 0x00, 0x06, 0x00, 0x56, 0x00, /* 0000C7D0 */ 0x04, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x49, 0x00, 0x04, 0x00, 0x2B, 0x00, /* 0000C7E0 */ 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x2F, 0x00, -/* 0000C7F0 */ 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0xFD, 0xC7, 0x00, 0x00, 0x3F, 0x7E, 0x35, -/* 0000C800 */ 0x0A, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, +/* 0000C7F0 */ 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0xFD, 0xC7, 0x00, 0x00, 0xBF, 0xFC, 0x6A, +/* 0000C800 */ 0x04, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, /* 0000C810 */ 0x11, 0x00, 0x25, 0x00, 0xFE, 0xE3, 0x51, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, -/* 0000C820 */ 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x09, 0x15, 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, -/* 0000C830 */ 0x01, 0x08, 0x41, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000C820 */ 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x41, 0x09, 0x15, 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, +/* 0000C830 */ 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000C840 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000C850 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, /* 0000C860 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0xBB, 0x02, 0x02, 0xFE, 0x3F, 0x03, 0x02, 0xFE, 0x35, 0x03, @@ -4657,11 +4657,11 @@ namespace Js /* 0000CA80 */ 0xFE, 0x28, 0x02, 0x00, 0x0E, 0xFE, 0xFE, 0x02, 0x00, 0xFE, 0x10, 0x52, 0x0C, 0x00, 0x00, 0x00, /* 0000CA90 */ 0x00, 0x2C, 0x00, 0x83, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x4D, 0x00, 0x1E, 0x00, 0x4C, /* 0000CAA0 */ 0x00, 0x7C, 0x00, 0xA0, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x5E, 0x00, 0xAB, -/* 0000CAB0 */ 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, 0x00, 0x43, 0x00, 0x00, 0x3F, 0x7E, -/* 0000CAC0 */ 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xF2, 0x02, 0xFE, 0x9A, 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x01, +/* 0000CAB0 */ 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, 0x00, 0x43, 0x00, 0x00, 0xBF, 0xFC, +/* 0000CAC0 */ 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xF2, 0x02, 0xFE, 0x9A, 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x01, /* 0000CAD0 */ 0x00, 0x22, 0x00, 0xFE, 0x41, 0x47, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, -/* 0000CAE0 */ 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x0A, 0x05, 0x0B, 0x06, 0x2A, 0x23, 0x01, 0x04, 0x02, 0x02, -/* 0000CAF0 */ 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CAE0 */ 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x01, 0x0A, 0x05, 0x0B, 0x06, 0x2A, 0x23, 0x01, 0x04, 0x02, +/* 0000CAF0 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, /* 0000CB20 */ 0x00, 0x02, 0xFE, 0x1E, 0x03, 0xB5, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0C, @@ -4679,7 +4679,7 @@ namespace Js /* 0000CBE0 */ 0xFE, 0xF9, 0x01, 0x00, 0x0E, 0xFE, 0x1F, 0x03, 0x00, 0xFE, 0x58, 0x47, 0x0B, 0x00, 0x00, 0x00, /* 0000CBF0 */ 0x00, 0x4C, 0x00, 0x60, 0x00, 0x09, 0x00, 0x20, 0x00, 0x09, 0x00, 0x23, 0x00, 0x15, 0x00, 0x51, /* 0000CC00 */ 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x29, -/* 0000CC10 */ 0x00, 0x0B, 0x00, 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x02, 0x00, 0xFC, +/* 0000CC10 */ 0x00, 0x0B, 0x00, 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x3F, 0xFD, 0x22, 0x04, 0x00, 0xFC, /* 0000CC20 */ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x1F, /* 0000CC30 */ 0x00, 0xFE, 0x63, 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x63, 0x44, 0xFE, /* 0000CC40 */ 0xB8, 0x02, 0xFE, 0xB8, 0x02, 0x01, 0x06, 0x04, 0x07, 0x08, 0x1C, 0x1C, 0x01, 0x03, 0x06, 0x04, @@ -4695,11 +4695,11 @@ namespace Js /* 0000CCE0 */ 0x00, 0x00, 0x00, 0x08, 0x5C, 0x03, 0x08, 0xEE, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x93, 0x02, 0x00, /* 0000CCF0 */ 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x1C, /* 0000CD00 */ 0x03, 0x00, 0xFE, 0x7A, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x30, 0x00, 0x5A, 0x00, -/* 0000CD10 */ 0x5A, 0x02, 0x0D, 0x00, 0x16, 0x00, 0x00, 0x1B, 0xCD, 0x00, 0x00, 0xBF, 0x7E, 0x1D, 0x0A, 0x00, +/* 0000CD10 */ 0x5A, 0x02, 0x0D, 0x00, 0x16, 0x00, 0x00, 0x1B, 0xCD, 0x00, 0x00, 0xBF, 0xFD, 0x3A, 0x04, 0x00, /* 0000CD20 */ 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, 0x6B, 0xFF, 0xA2, 0x41, 0x11, 0x00, /* 0000CD30 */ 0x20, 0x00, 0xFE, 0x0D, 0x45, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x0D, 0x45, -/* 0000CD40 */ 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, 0x20, 0x02, 0x01, 0x01, -/* 0000CD50 */ 0x03, 0x08, 0x40, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CD40 */ 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x40, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, 0x20, 0x02, 0x01, +/* 0000CD50 */ 0x01, 0x03, 0x08, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CD60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0xB4, 0x8F, /* 0000CD70 */ 0x02, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x04, 0x00, /* 0000CD80 */ 0x00, 0x96, 0x02, 0x00, 0x00, 0x00, 0x08, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, @@ -4714,20 +4714,20 @@ namespace Js /* 0000CE10 */ 0x00, 0x93, 0x03, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x9D, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA8, /* 0000CE20 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x77, 0x01, 0xFE, 0x1D, 0x03, 0x00, 0xFE, 0x2E, 0x45, 0x05, /* 0000CE30 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x43, 0x00, 0x28, 0x00, 0x37, 0x00, 0x56, 0x00, 0x28, 0x01, -/* 0000CE40 */ 0x1C, 0x00, 0x27, 0x00, 0x00, 0x49, 0xCE, 0x00, 0x00, 0x3F, 0x6E, 0x0D, 0x0A, 0x00, 0xFC, 0x07, +/* 0000CE40 */ 0x1C, 0x00, 0x27, 0x00, 0x00, 0x49, 0xCE, 0x00, 0x00, 0xBF, 0xDC, 0x1A, 0x04, 0x00, 0xFC, 0x07, /* 0000CE50 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8E, 0x01, 0x56, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x21, 0x00, -/* 0000CE60 */ 0xFE, 0xF2, 0x45, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x04, -/* 0000CE70 */ 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CE60 */ 0xFE, 0xF2, 0x45, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x41, +/* 0000CE70 */ 0x04, 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xBB, 0x02, 0x33, 0x8F, /* 0000CEA0 */ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, 0x00, /* 0000CEB0 */ 0x00, 0x47, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8F, 0x01, 0x00, 0x00, /* 0000CEC0 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x9D, 0x03, 0x06, 0x04, 0x00, 0x00, 0xA8, 0x00, /* 0000CED0 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x19, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x34, -/* 0000CEE0 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, +/* 0000CEE0 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, /* 0000CEF0 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1E, /* 0000CF00 */ 0x00, 0xFE, 0xFA, 0x3B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFA, 0x3B, 0xD0, 0xD0, -/* 0000CF10 */ 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, +/* 0000CF10 */ 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, /* 0000CF20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, /* 0000CF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000CF40 */ 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, @@ -4738,10 +4738,10 @@ namespace Js /* 0000CF90 */ 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, /* 0000CFA0 */ 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, /* 0000CFB0 */ 0x18, 0x3C, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x67, 0x00, 0x00, -/* 0000CFC0 */ 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5B, 0x01, 0x89, +/* 0000CFC0 */ 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5B, 0x01, 0x89, /* 0000CFD0 */ 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1D, 0x00, 0xFE, 0x55, 0x38, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000CFE0 */ 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, -/* 0000CFF0 */ 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CFE0 */ 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, +/* 0000CFF0 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D000 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D010 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, /* 0000D020 */ 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, 0x62, 0x0B, 0x07, 0x00, 0x12, 0x03, @@ -4751,10 +4751,10 @@ namespace Js /* 0000D060 */ 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, /* 0000D070 */ 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000D080 */ 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x73, 0x38, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, -/* 0000D090 */ 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, +/* 0000D090 */ 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, /* 0000D0A0 */ 0xFF, 0xFF, 0xFE, 0x4F, 0x01, 0x81, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1C, 0x00, 0xFE, 0xC0, 0x34, -/* 0000D0B0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x07, 0x06, 0x0B, 0x06, -/* 0000D0C0 */ 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D0B0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x0B, 0x07, 0x06, 0x0B, +/* 0000D0C0 */ 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, /* 0000D0F0 */ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, @@ -4764,10 +4764,10 @@ namespace Js /* 0000D130 */ 0x00, 0x05, 0x5C, 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0C, 0x01, /* 0000D140 */ 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, /* 0000D150 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0xDE, 0x34, 0x03, 0x07, -/* 0000D160 */ 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, +/* 0000D160 */ 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, /* 0000D170 */ 0x0F, 0xFC, 0x07, 0xFE, 0xAA, 0x02, 0xFE, 0x33, 0x01, 0x1D, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x1B, /* 0000D180 */ 0x00, 0xFE, 0x5D, 0x2F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x5D, 0x2F, 0xFE, 0x7E, -/* 0000D190 */ 0x03, 0xFE, 0x7E, 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, 0x07, 0x01, 0x05, 0x05, +/* 0000D190 */ 0x03, 0xFE, 0x7E, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, 0x07, 0x05, 0x05, /* 0000D1A0 */ 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1B0 */ 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1C0 */ 0xFF, 0x00, 0x00, 0x04, 0x02, 0xFE, 0x0D, 0x03, 0x02, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x19, 0x03, @@ -4800,10 +4800,10 @@ namespace Js /* 0000D370 */ 0x2B, 0x02, 0xFE, 0xF5, 0x01, 0xFE, 0xF7, 0x01, 0x00, 0xFE, 0x9A, 0x2F, 0x0B, 0x02, 0x00, 0x00, /* 0000D380 */ 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x07, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x37, /* 0000D390 */ 0x00, 0x26, 0x00, 0x39, 0x00, 0x10, 0x00, 0x4B, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x13, 0x00, 0x4D, -/* 0000D3A0 */ 0x00, 0x6E, 0x00, 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, +/* 0000D3A0 */ 0x00, 0x6E, 0x00, 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, /* 0000D3B0 */ 0x07, 0xFE, 0xE9, 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x1A, 0x00, 0xFE, /* 0000D3C0 */ 0x60, 0x2D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x60, 0x2D, 0xFE, 0xB2, 0x01, 0xFE, -/* 0000D3D0 */ 0xB2, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, +/* 0000D3D0 */ 0xB2, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, /* 0000D3E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, /* 0000D3F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000D400 */ 0x00, 0x03, 0x02, 0xFE, 0xA6, 0x02, 0x04, 0xB9, 0x14, 0x0D, 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, @@ -4820,8 +4820,8 @@ namespace Js /* 0000D4B0 */ 0x07, 0x5C, 0x02, 0x08, 0xEE, 0x03, 0x00, 0x0B, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000D4C0 */ 0x00, 0x00, 0x00, 0xFE, 0x26, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x2F, 0x02, 0x00, 0xFE, 0x9B, 0x2D, /* 0000D4D0 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x43, 0x00, 0x26, 0x00, 0x39, -/* 0000D4E0 */ 0x00, 0x16, 0x00, 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, 0x00, 0x32, 0x00, 0x00, 0xBF, 0x7E, -/* 0000D4F0 */ 0x31, 0x02, 0x4F, 0xFC, 0x0F, 0xFE, 0xCC, 0x02, 0xFE, 0x12, 0x01, 0x04, 0xFF, 0xA3, 0x41, 0x01, +/* 0000D4E0 */ 0x00, 0x16, 0x00, 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, 0x00, 0x32, 0x00, 0x00, 0x3F, 0xFD, +/* 0000D4F0 */ 0x62, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0xCC, 0x02, 0xFE, 0x12, 0x01, 0x04, 0xFF, 0xA3, 0x41, 0x01, /* 0000D500 */ 0x00, 0x18, 0x00, 0xFE, 0xB8, 0x29, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB8, /* 0000D510 */ 0x29, 0xFE, 0x80, 0x03, 0xFE, 0x80, 0x03, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, 0x01, 0x02, /* 0000D520 */ 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x0F, 0xFF, @@ -4843,10 +4843,10 @@ namespace Js /* 0000D620 */ 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x03, 0xFE, 0x16, 0x03, 0xFE, /* 0000D630 */ 0x17, 0x03, 0xFE, 0x18, 0x03, 0x00, 0xFE, 0x0C, 0x2A, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, /* 0000D640 */ 0x1A, 0x00, 0x06, 0x00, 0x18, 0x00, 0x33, 0x00, 0x7C, 0x02, 0x4C, 0x00, 0x69, 0x00, 0x0D, 0x00, -/* 0000D650 */ 0x14, 0x00, 0x00, 0x57, 0xD6, 0x00, 0x00, 0x3F, 0x7E, 0x01, 0x0B, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, +/* 0000D650 */ 0x14, 0x00, 0x00, 0x57, 0xD6, 0x00, 0x00, 0xBF, 0xFC, 0x02, 0x06, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, /* 0000D660 */ 0xFF, 0xFF, 0xFF, 0xFE, 0x15, 0x01, 0x41, 0xFF, 0xB2, 0x41, 0x11, 0x00, 0x19, 0x00, 0xFE, 0x77, /* 0000D670 */ 0x2A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x77, 0x2A, 0xFE, 0x37, 0x02, 0xFE, 0x37, -/* 0000D680 */ 0x02, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x45, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 0000D680 */ 0x02, 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, /* 0000D690 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D6A0 */ 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x02, /* 0000D6B0 */ 0xFE, 0xA9, 0x02, 0x02, 0xFE, 0xC3, 0x02, 0x09, 0x02, 0xFE, 0xC5, 0x02, 0x02, 0xFE, 0xC4, 0x02, @@ -4870,7 +4870,7 @@ namespace Js /* 0000D7D0 */ 0x01, 0x00, 0x00, 0x00, 0xFE, 0xED, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, /* 0000D7E0 */ 0xFE, 0x7F, 0x01, 0x00, 0xFE, 0xAF, 0x2A, 0x07, 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x5F, 0x00, /* 0000D7F0 */ 0x0B, 0x00, 0x2C, 0x00, 0x5A, 0x00, 0x8E, 0x00, 0x20, 0x00, 0x35, 0x00, 0x01, 0x00, 0x1E, 0x00, -/* 0000D800 */ 0x1E, 0x00, 0x92, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0xCB, 0x02, 0xED, +/* 0000D800 */ 0x1E, 0x00, 0x92, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0xCB, 0x02, 0xED, /* 0000D810 */ 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x16, 0x00, 0xFE, 0x5B, 0x25, 0x01, 0xFF, 0x00, 0x10, 0x01, /* 0000D820 */ 0x00, 0x02, 0x02, 0xFE, 0x5B, 0x25, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x01, 0x08, 0x05, 0x0A, /* 0000D830 */ 0x05, 0x29, 0x26, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, @@ -4891,10 +4891,10 @@ namespace Js /* 0000D920 */ 0x02, 0xF0, 0xFE, 0x11, 0x03, 0x00, 0xFE, 0x8F, 0x25, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, /* 0000D930 */ 0x33, 0x00, 0x08, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x26, 0x00, /* 0000D940 */ 0x2F, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x27, 0x00, 0xA5, 0x02, 0x0D, 0x00, -/* 0000D950 */ 0x12, 0x00, 0x00, 0x57, 0xD9, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, +/* 0000D950 */ 0x12, 0x00, 0x00, 0x57, 0xD9, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, /* 0000D960 */ 0xFF, 0xFF, 0xFF, 0xFC, 0x22, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x17, 0x00, 0xFE, 0x12, 0x27, 0xFF, -/* 0000D970 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x06, -/* 0000D980 */ 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x41, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, +/* 0000D970 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x41, +/* 0000D980 */ 0x06, 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, /* 0000D990 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, /* 0000D9A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 0000D9B0 */ 0x08, 0x03, 0x02, 0xFE, 0x12, 0x03, 0x03, 0x02, 0xFE, 0x13, 0x03, 0x04, 0x01, 0xFF, 0xFF, 0xFF, @@ -4925,10 +4925,10 @@ namespace Js /* 0000DB40 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x24, 0x02, 0xFE, 0x29, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0x2E, /* 0000DB50 */ 0x02, 0xFE, 0xF5, 0x01, 0x00, 0xFE, 0x33, 0x27, 0x09, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x66, /* 0000DB60 */ 0x00, 0x25, 0x00, 0x4A, 0x00, 0x26, 0x00, 0x34, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x4E, -/* 0000DB70 */ 0x00, 0x26, 0x00, 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, 0x00, 0x4A, 0x00, 0x00, 0x3F, 0x7E, -/* 0000DB80 */ 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xCA, 0x02, 0xE6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x15, +/* 0000DB70 */ 0x00, 0x26, 0x00, 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, 0x00, 0x4A, 0x00, 0x00, 0xBF, 0xFC, +/* 0000DB80 */ 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xCA, 0x02, 0xE6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x15, /* 0000DB90 */ 0x00, 0xFE, 0x35, 0x24, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x24, 0xA6, 0xA6, -/* 0000DBA0 */ 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, +/* 0000DBA0 */ 0x01, 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, /* 0000DBB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, /* 0000DBC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000DBD0 */ 0x63, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, @@ -4938,10 +4938,10 @@ namespace Js /* 0000DC10 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x02, 0x07, 0xF2, /* 0000DC20 */ 0x03, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x05, 0x02, 0x09, 0x02, 0x00, /* 0000DC30 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x29, 0x02, 0xFE, 0x05, 0x02, 0x00, 0xFE, 0x68, 0x24, -/* 0000DC40 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, 0x00, 0x47, 0x00, 0x00, 0x3F, 0x7E, -/* 0000DC50 */ 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xD6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x14, +/* 0000DC40 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, 0x00, 0x47, 0x00, 0x00, 0xBF, 0xFC, +/* 0000DC50 */ 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xD6, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x14, /* 0000DC60 */ 0x00, 0xFE, 0xDE, 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xDE, 0x21, 0xFE, 0x4F, -/* 0000DC70 */ 0x02, 0xFE, 0x4F, 0x02, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, 0x06, 0x05, 0x01, 0x03, +/* 0000DC70 */ 0x02, 0xFE, 0x4F, 0x02, 0x01, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, 0x06, 0x05, 0x03, /* 0000DC80 */ 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DC90 */ 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DCA0 */ 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x0D, 0x03, 0x04, 0x02, 0xFE, 0x0E, 0x03, 0x02, 0xFE, 0x0F, @@ -4965,10 +4965,10 @@ namespace Js /* 0000DDC0 */ 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0xFE, 0x2B, 0x02, /* 0000DDD0 */ 0x23, 0x00, 0xFE, 0x31, 0x22, 0x08, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, /* 0000DDE0 */ 0x34, 0x00, 0x26, 0x00, 0x41, 0x00, 0x32, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x90, 0x00, 0x29, 0x00, -/* 0000DDF0 */ 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC8, +/* 0000DDF0 */ 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC8, /* 0000DE00 */ 0x02, 0xBC, 0x04, 0xFF, 0xA3, 0x41, 0x01, 0x00, 0x13, 0x00, 0xFE, 0xA7, 0x1E, 0xFF, 0x00, 0x10, -/* 0000DE10 */ 0x01, 0x00, 0x06, 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, 0xFE, 0x2F, 0x03, 0x0B, 0x0A, 0x11, -/* 0000DE20 */ 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000DE10 */ 0x01, 0x00, 0x06, 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, 0xFE, 0x2F, 0x03, 0x01, 0x0B, 0x0A, +/* 0000DE20 */ 0x11, 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x07, /* 0000DE50 */ 0x03, 0x02, 0xFE, 0x08, 0x03, 0x02, 0xFE, 0x09, 0x03, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, @@ -5001,7 +5001,7 @@ namespace Js /* 0000E000 */ 0xF0, 0x1E, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x08, /* 0000E010 */ 0x00, 0x2A, 0x00, 0x26, 0x00, 0x48, 0x00, 0x08, 0x00, 0x29, 0x00, 0x26, 0x00, 0x40, 0x00, 0x08, /* 0000E020 */ 0x00, 0x29, 0x00, 0x26, 0x00, 0x40, 0x00, 0x3F, 0x00, 0x6C, 0x00, 0x96, 0x00, 0xA9, 0x00, 0x06, -/* 0000E030 */ 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x02, 0x4F, 0xFC, 0x0F, 0xFF, +/* 0000E030 */ 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFF, /* 0000E040 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x14, 0xFF, 0xA0, 0x41, 0x11, 0x00, 0x0C, 0x00, 0xFE, 0x1B, 0x19, /* 0000E050 */ 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x1B, 0x19, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, /* 0000E060 */ 0x05, 0x04, 0x0A, 0x0B, 0x04, 0x1D, 0x1D, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0xFF, @@ -5023,10 +5023,10 @@ namespace Js /* 0000E160 */ 0x00, 0xFE, 0x01, 0x03, 0xFE, 0x29, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x2D, 0x02, /* 0000E170 */ 0xFE, 0x06, 0x03, 0x00, 0xFE, 0x32, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0xF2, 0x04, /* 0000E180 */ 0x00, 0x8E, 0xE5, 0x00, 0x00, 0xF8, 0xE4, 0x00, 0x00, 0x62, 0xE4, 0x00, 0x00, 0xCC, 0xE3, 0x00, -/* 0000E190 */ 0x00, 0x7B, 0xE2, 0x00, 0x00, 0x99, 0xE1, 0x00, 0x00, 0x3F, 0xFE, 0x11, 0x0E, 0x00, 0xFC, 0x07, +/* 0000E190 */ 0x00, 0x7B, 0xE2, 0x00, 0x00, 0x99, 0xE1, 0x00, 0x00, 0xBF, 0xFC, 0x23, 0x0C, 0x00, 0xFC, 0x07, /* 0000E1A0 */ 0xFE, 0x06, 0x03, 0xAC, 0x19, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x12, 0x00, 0xFE, 0xCF, 0x1C, 0xFF, -/* 0000E1B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x05, -/* 0000E1C0 */ 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E1B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, +/* 0000E1C0 */ 0x05, 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x6A, 0x00, 0x04, 0x08, /* 0000E1F0 */ 0x6E, 0xEB, 0x00, 0xEC, 0x00, 0x0F, 0x03, 0x00, 0x04, 0x09, 0x5D, 0x00, 0x8F, 0x01, 0x00, 0x00, @@ -5037,10 +5037,10 @@ namespace Js /* 0000E240 */ 0x00, 0x07, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x07, /* 0000E250 */ 0x07, 0x01, 0x00, 0x47, 0x04, 0x07, 0x09, 0x9A, 0xFF, 0xED, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000E260 */ 0x00, 0x00, 0xFE, 0x26, 0x1D, 0x05, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x34, 0x00, -/* 0000E270 */ 0x55, 0x00, 0x08, 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x51, 0x0A, 0x0F, +/* 0000E270 */ 0x55, 0x00, 0x08, 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0xA2, 0x04, 0x0F, /* 0000E280 */ 0xFC, 0x07, 0xFE, 0x05, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x11, 0x00, 0xFE, 0xAF, /* 0000E290 */ 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAF, 0x1B, 0xFE, 0x02, 0x01, 0xFE, 0x02, -/* 0000E2A0 */ 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, +/* 0000E2A0 */ 0x01, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, /* 0000E2B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, /* 0000E2C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000E2D0 */ 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, @@ -5058,38 +5058,38 @@ namespace Js /* 0000E390 */ 0x5C, 0x01, 0x0C, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x08, 0x0A, /* 0000E3A0 */ 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1B, 0x29, 0x00, 0xFE, /* 0000E3B0 */ 0xCF, 0x1B, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x44, -/* 0000E3C0 */ 0x00, 0x39, 0x00, 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, +/* 0000E3C0 */ 0x00, 0x39, 0x00, 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, /* 0000E3D0 */ 0x00, 0xFC, 0x07, 0xFE, 0x04, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x10, 0x00, 0xFE, -/* 0000E3E0 */ 0x35, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x1B, 0x5F, 0x5F, 0x03, 0x03, -/* 0000E3F0 */ 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E3E0 */ 0x35, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x1B, 0x5F, 0x5F, 0x01, 0x03, +/* 0000E3F0 */ 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E400 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E410 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, /* 0000E420 */ 0x03, 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x05, 0x00, /* 0000E430 */ 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, /* 0000E440 */ 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, /* 0000E450 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x55, 0x1B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3E, -/* 0000E460 */ 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x03, 0x03, 0x9B, 0x16, 0xFF, 0xA2, +/* 0000E460 */ 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x03, 0x03, 0x9B, 0x16, 0xFF, 0xA2, /* 0000E470 */ 0x41, 0x01, 0x00, 0x0F, 0x00, 0xFE, 0xBA, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0000E480 */ 0xBA, 0x1A, 0x58, 0x58, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, +/* 0000E480 */ 0xBA, 0x1A, 0x58, 0x58, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000E490 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, /* 0000E4A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, /* 0000E4B0 */ 0x37, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, 0x05, 0x47, 0x00, 0x05, /* 0000E4C0 */ 0x09, 0x1E, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, /* 0000E4D0 */ 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, /* 0000E4E0 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xDA, 0x1A, 0x02, 0x00, -/* 0000E4F0 */ 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, +/* 0000E4F0 */ 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, /* 0000E500 */ 0x02, 0x03, 0x96, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0E, 0x00, 0xFE, 0x3F, 0x1A, 0xFF, 0x00, -/* 0000E510 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, -/* 0000E520 */ 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E510 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, +/* 0000E520 */ 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E530 */ 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E540 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x21, /* 0000E550 */ 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, /* 0000E560 */ 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, /* 0000E570 */ 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, -/* 0000E580 */ 0x00, 0xFE, 0x5F, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, -/* 0000E590 */ 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x01, 0x03, 0x8F, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0D, +/* 0000E580 */ 0x00, 0xFE, 0x5F, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, +/* 0000E590 */ 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x01, 0x03, 0x8F, 0x16, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0D, /* 0000E5A0 */ 0x00, 0xFE, 0x5F, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5F, 0x19, 0xC5, 0xC5, -/* 0000E5B0 */ 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, +/* 0000E5B0 */ 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000E5C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, /* 0000E5D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000E5E0 */ 0x04, 0x5F, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, @@ -5099,10 +5099,10 @@ namespace Js /* 0000E620 */ 0x07, 0x02, 0x00, 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x06, 0x06, 0x01, 0x00, 0x47, /* 0000E630 */ 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000E640 */ 0x00, 0x00, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFE, 0x7F, 0x19, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, -/* 0000E650 */ 0x00, 0x27, 0x00, 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 0000E650 */ 0x00, 0x27, 0x00, 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 0000E660 */ 0x8F, 0xFC, 0x07, 0xFE, 0xE6, 0x02, 0x89, 0x20, 0xFF, 0xA0, 0x41, 0x01, 0x00, 0x0B, 0x00, 0xFE, -/* 0000E670 */ 0x95, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x95, 0x18, 0x6D, 0x6D, 0x05, 0x03, -/* 0000E680 */ 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, +/* 0000E670 */ 0x95, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x95, 0x18, 0x6D, 0x6D, 0x01, 0x05, +/* 0000E680 */ 0x03, 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, /* 0000E690 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, /* 0000E6A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, /* 0000E6B0 */ 0x01, 0x00, 0x00, 0x00, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, @@ -5112,10 +5112,10 @@ namespace Js /* 0000E6F0 */ 0x00, 0x5C, 0x02, 0x06, 0xF2, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, /* 0000E700 */ 0x04, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, /* 0000E710 */ 0xFE, 0xF9, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x03, 0x00, 0xFE, 0xAC, 0x18, 0x02, 0x00, 0x00, 0x00, -/* 0000E720 */ 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0E, 0x0F, 0xFC, 0x07, 0xFE, 0xE5, 0x02, +/* 0000E720 */ 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x0C, 0x0F, 0xFC, 0x07, 0xFE, 0xE5, 0x02, /* 0000E730 */ 0x79, 0x19, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x0A, 0x00, 0xFE, 0xC9, 0x15, 0xFF, 0x00, 0x10, 0x01, -/* 0000E740 */ 0x00, 0x05, 0x05, 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x0C, 0x06, 0x10, 0x06, -/* 0000E750 */ 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, +/* 0000E740 */ 0x00, 0x05, 0x05, 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x01, 0x0C, 0x06, 0x10, +/* 0000E750 */ 0x06, 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, /* 0000E760 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, /* 0000E770 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x7A, 0xD1, 0x00, /* 0000E780 */ 0x02, 0xFE, 0xFF, 0x02, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xFE, @@ -5138,8 +5138,8 @@ namespace Js /* 0000E890 */ 0x00, 0x00, 0xFE, 0xF7, 0x01, 0xFE, 0xED, 0x01, 0x00, 0xFE, 0x19, 0x16, 0x0C, 0x04, 0x00, 0x00, /* 0000E8A0 */ 0x00, 0x30, 0x00, 0x62, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0F, 0x00, 0x34, 0x00, 0x16, 0x00, 0x3A, /* 0000E8B0 */ 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x6A, 0x00, 0x0E, 0x00, 0x36, -/* 0000E8C0 */ 0x00, 0x08, 0x00, 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x7E, -/* 0000E8D0 */ 0x35, 0x02, 0xCF, 0xFD, 0x0F, 0xFE, 0xE4, 0x02, 0x5A, 0x1E, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x07, +/* 0000E8C0 */ 0x00, 0x08, 0x00, 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, 0x00, 0x52, 0x00, 0x00, 0x3F, 0xFD, +/* 0000E8D0 */ 0x6A, 0x04, 0xCF, 0xFD, 0x0F, 0xFE, 0xE4, 0x02, 0x5A, 0x1E, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x07, /* 0000E8E0 */ 0x00, 0xFE, 0xD8, 0x0E, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xD8, 0x0E, 0xFE, /* 0000E8F0 */ 0xD4, 0x06, 0xFE, 0xD4, 0x06, 0x03, 0x10, 0x0C, 0x15, 0x09, 0x62, 0x5B, 0x01, 0x01, 0x08, 0x01, /* 0000E900 */ 0x09, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0x14, @@ -5183,10 +5183,10 @@ namespace Js /* 0000EB60 */ 0xFD, 0x02, 0x00, 0xFE, 0x1D, 0x0F, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x37, 0x00, 0x07, /* 0000EB70 */ 0x00, 0x1C, 0x00, 0x33, 0x00, 0x3F, 0x02, 0x3D, 0x00, 0x4A, 0x00, 0x1D, 0x00, 0x39, 0x00, 0x12, /* 0000EB80 */ 0x00, 0x51, 0x00, 0x0B, 0x00, 0x20, 0x00, 0x33, 0x00, 0xBF, 0x01, 0x0B, 0x00, 0x2A, 0x00, 0xBA, -/* 0000EB90 */ 0x00, 0x1F, 0x01, 0x00, 0xD8, 0xEC, 0x00, 0x00, 0x9C, 0xEB, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 0000EB90 */ 0x00, 0x1F, 0x01, 0x00, 0xD8, 0xEC, 0x00, 0x00, 0x9C, 0xEB, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 0000EBA0 */ 0x8F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x09, /* 0000EBB0 */ 0x00, 0xFE, 0xD4, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xD4, 0x12, 0xFE, 0x7D, -/* 0000EBC0 */ 0x01, 0xFE, 0x7D, 0x01, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, 0x03, 0x06, 0x41, 0x01, +/* 0000EBC0 */ 0x01, 0xFE, 0x7D, 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, 0x03, 0x06, 0x01, /* 0000EBD0 */ 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBE0 */ 0xFF, 0xFF, 0xFF, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBF0 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, @@ -5203,10 +5203,10 @@ namespace Js /* 0000ECA0 */ 0x00, 0x0A, 0x05, 0x00, 0x5C, 0x02, 0x0A, 0x5C, 0x03, 0x05, 0xEE, 0x04, 0xFF, 0x09, 0x02, 0x00, /* 0000ECB0 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x00, 0x0E, 0xFE, 0xFE, 0x02, 0x00, 0xFE, /* 0000ECC0 */ 0xF9, 0x12, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x7B, 0x00, 0x09, 0x00, 0x25, 0x00, 0x41, -/* 0000ECD0 */ 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFF, +/* 0000ECD0 */ 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFF, /* 0000ECE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x3D, 0xFF, 0xA2, 0x41, 0x11, 0x00, 0x08, 0x00, 0xFE, 0xA1, 0x0F, -/* 0000ECF0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x04, 0x05, 0x07, 0x06, -/* 0000ED00 */ 0x0F, 0x0F, 0x02, 0x01, 0x03, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000ECF0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x41, 0x04, 0x05, 0x07, +/* 0000ED00 */ 0x06, 0x0F, 0x0F, 0x02, 0x01, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xF8, 0x02, 0x02, 0xFE, 0xBB, 0x02, 0x04, /* 0000ED30 */ 0x50, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, @@ -5215,9 +5215,9 @@ namespace Js /* 0000ED60 */ 0x08, 0x2F, 0x08, 0x02, 0x05, 0x5C, 0x03, 0x08, 0x5D, 0x04, 0x03, 0x00, 0x00, 0xEE, 0x05, 0x07, /* 0000ED70 */ 0x07, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xA8, 0x00, 0x24, /* 0000ED80 */ 0x00, 0x00, 0x00, 0x00, 0xFE, 0xB5, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4C, 0x00, -/* 0000ED90 */ 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xF5, 0x02, 0x52, 0x1F, 0xFF, 0xA2, 0x41, +/* 0000ED90 */ 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xF5, 0x02, 0x52, 0x1F, 0xFF, 0xA2, 0x41, /* 0000EDA0 */ 0x01, 0x00, 0x06, 0x00, 0xFE, 0xA2, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA2, -/* 0000EDB0 */ 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, 0x12, 0x01, 0x01, 0x01, +/* 0000EDB0 */ 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, 0x12, 0x01, 0x01, /* 0000EDC0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x4E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, @@ -5227,28 +5227,28 @@ namespace Js /* 0000EE20 */ 0x00, 0x03, 0x04, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x04, 0x09, 0x02, /* 0000EE30 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0x01, 0x00, 0xFE, 0xCE, 0x0D, 0x07, 0x00, /* 0000EE40 */ 0x00, 0x00, 0x00, 0x26, 0x00, 0x47, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x25, 0x00, 0x08, -/* 0000EE50 */ 0x00, 0x26, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, +/* 0000EE50 */ 0x00, 0x26, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, /* 0000EE60 */ 0x0F, 0xFC, 0x07, 0xFE, 0xE3, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x05, 0x00, 0xFE, -/* 0000EE70 */ 0x2B, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x2B, 0x0D, 0x53, 0x53, 0x05, 0x02, -/* 0000EE80 */ 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EE70 */ 0x2B, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x2B, 0x0D, 0x53, 0x53, 0x01, 0x05, +/* 0000EE80 */ 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EEA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x2D, 0x8F, 0x01, /* 0000EEB0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, /* 0000EEC0 */ 0x00, 0x5C, 0x00, 0x06, 0x5C, 0x01, 0x03, 0x5C, 0x02, 0x02, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, /* 0000EED0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x73, 0x02, -/* 0000EEE0 */ 0x00, 0xFE, 0x49, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x00, 0x3F, 0x6E, -/* 0000EEF0 */ 0x01, 0x08, 0x0F, 0xFC, 0x07, 0xFE, 0xE2, 0x02, 0x48, 0x1C, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x04, +/* 0000EEE0 */ 0x00, 0xFE, 0x49, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x00, 0xBF, 0xDC, +/* 0000EEF0 */ 0x02, 0x00, 0x0F, 0xFC, 0x07, 0xFE, 0xE2, 0x02, 0x48, 0x1C, 0xFF, 0xA2, 0x41, 0x01, 0x00, 0x04, /* 0000EF00 */ 0x00, 0xFE, 0x8B, 0x0C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x0C, 0x7F, 0x7F, -/* 0000EF10 */ 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x41, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EF10 */ 0x41, 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000EF40 */ 0x01, 0x1C, 0x00, 0x0A, 0x80, 0x01, 0x07, 0x00, 0x0A, 0x80, 0x1E, 0x62, 0x05, 0x04, 0x00, 0x14, /* 0000EF50 */ 0x0F, 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, 0x62, 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, /* 0000EF60 */ 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x0B, 0x01, 0x00, 0xFE, /* 0000EF70 */ 0xA4, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x00, -/* 0000EF80 */ 0x3F, 0xFE, 0x15, 0x0C, 0x00, 0xFC, 0x07, 0xFE, 0xF4, 0x02, 0x3E, 0x12, 0xFF, 0xA2, 0x41, 0x01, +/* 0000EF80 */ 0xBF, 0xFC, 0x2B, 0x08, 0x00, 0xFC, 0x07, 0xFE, 0xF4, 0x02, 0x3E, 0x12, 0xFF, 0xA2, 0x41, 0x01, /* 0000EF90 */ 0x00, 0x03, 0x00, 0xFE, 0x5B, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x5B, 0x0B, -/* 0000EFA0 */ 0xA9, 0xA9, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x41, 0xFF, 0xFF, +/* 0000EFA0 */ 0xA9, 0xA9, 0x41, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000EFB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFD0 */ 0xFF, 0x01, 0x03, 0x2F, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, @@ -5257,9 +5257,9 @@ namespace Js /* 0000F000 */ 0x01, 0x0A, 0xEE, 0x02, 0xFF, 0x09, 0x00, 0x00, 0x28, 0x08, 0x08, 0x09, 0xD8, 0xFF, 0xED, 0x00, /* 0000F010 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x83, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0000F020 */ 0x00, 0x23, 0x00, 0x08, 0x00, 0x21, 0x00, 0x18, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, -/* 0000F030 */ 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0xD7, 0x02, 0x28, 0x1F, 0xFF, 0xA2, 0x41, 0x01, +/* 0000F030 */ 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0xD7, 0x02, 0x28, 0x1F, 0xFF, 0xA2, 0x41, 0x01, /* 0000F040 */ 0x00, 0x02, 0x00, 0xFE, 0x22, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x22, 0x07, -/* 0000F050 */ 0x73, 0x73, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000F050 */ 0x73, 0x73, 0x41, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F060 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F070 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x45, /* 0000F080 */ 0x8F, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5C, diff --git a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp index bff1d408499..f7ced1d35ee 100644 --- a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp +++ b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp @@ -414,7 +414,7 @@ namespace Js break; } - Js::ScriptFunction *function = scriptContext->GetLibrary()->CreateScriptFunction(intlByteCode->GetNestedFunc(0)->EnsureDeserialized()); + Js::ScriptFunction *function = scriptContext->GetLibrary()->CreateScriptFunction(intlByteCode->GetNestedFunctionForExecution(0)); // If we are profiling, we need to register the script to the profiler callback, so the script compiled event will be sent. if (scriptContext->IsProfiling()) diff --git a/lib/Runtime/Library/JavascriptFunction.cpp b/lib/Runtime/Library/JavascriptFunction.cpp index ed578a7236a..5624bbce78d 100644 --- a/lib/Runtime/Library/JavascriptFunction.cpp +++ b/lib/Runtime/Library/JavascriptFunction.cpp @@ -208,11 +208,11 @@ namespace Js BOOL strictMode = FALSE; JavascriptFunction *pfuncScript; - ParseableFunctionInfo *pfuncBodyCache = NULL; + FunctionInfo *pfuncInfoCache = NULL; char16 const * sourceString = bs->GetSz(); charcount_t sourceLen = bs->GetLength(); EvalMapString key(sourceString, sourceLen, moduleID, strictMode, /* isLibraryCode = */ false); - if (!scriptContext->IsInNewFunctionMap(key, &pfuncBodyCache)) + if (!scriptContext->IsInNewFunctionMap(key, &pfuncInfoCache)) { // Validate formals here scriptContext->GetGlobalObject()->ValidateSyntax( @@ -237,20 +237,15 @@ namespace Js Assert(functionInfo); functionInfo->SetGrfscr(functionInfo->GetGrfscr() | fscrGlobalCode); - scriptContext->AddToNewFunctionMap(key, functionInfo); + scriptContext->AddToNewFunctionMap(key, functionInfo->GetFunctionInfo()); + } + else if (pfuncInfoCache->IsCoroutine()) + { + pfuncScript = scriptContext->GetLibrary()->CreateGeneratorVirtualScriptFunction(pfuncInfoCache->GetFunctionProxy()); } else { - // Get the latest proxy - FunctionProxy * proxy = pfuncBodyCache->GetFunctionProxy(); - if (proxy->IsCoroutine()) - { - pfuncScript = scriptContext->GetLibrary()->CreateGeneratorVirtualScriptFunction(proxy); - } - else - { - pfuncScript = scriptContext->GetLibrary()->CreateScriptFunction(proxy); - } + pfuncScript = scriptContext->GetLibrary()->CreateScriptFunction(pfuncInfoCache->GetFunctionProxy()); } #if ENABLE_TTD @@ -902,7 +897,7 @@ namespace Js Var functionResult; if (spreadIndices != nullptr) { - functionResult = CallSpreadFunction(functionObj, functionObj->GetEntryPoint(), newArgs, spreadIndices); + functionResult = CallSpreadFunction(functionObj, newArgs, spreadIndices); } else { @@ -945,7 +940,7 @@ namespace Js RUNTIME_ARGUMENTS(args, spreadIndices, function, callInfo); - return JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices); + return JavascriptFunction::CallSpreadFunction(function, args, spreadIndices); } uint32 JavascriptFunction::GetSpreadSize(const Arguments args, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext) @@ -1086,7 +1081,7 @@ namespace Js } } - Var JavascriptFunction::CallSpreadFunction(RecyclableObject* function, JavascriptMethod entryPoint, Arguments args, const Js::AuxArray *spreadIndices) + Var JavascriptFunction::CallSpreadFunction(RecyclableObject* function, Arguments args, const Js::AuxArray *spreadIndices) { ScriptContext* scriptContext = function->GetScriptContext(); @@ -1113,7 +1108,7 @@ namespace Js SpreadArgs(args, outArgs, spreadIndices, scriptContext); - return JavascriptFunction::CallFunction(function, entryPoint, outArgs); + return JavascriptFunction::CallFunction(function, function->GetEntryPoint(), outArgs); } Var JavascriptFunction::CallFunction(Arguments args) @@ -1556,7 +1551,6 @@ void __cdecl _alloca_probe_16() ParseableFunctionInfo* functionInfo = (*functionRef)->GetParseableFunctionInfo(); Assert(functionInfo); - Assert(functionInfo->HasBody()); functionInfo->GetFunctionBody()->AddDeferParseAttribute(); functionInfo->GetFunctionBody()->ResetEntryPoint(); functionInfo->GetFunctionBody()->ResetInParams(); @@ -1671,7 +1665,7 @@ void __cdecl _alloca_probe_16() // calls the default entry point the next time around if (funcInfo->IsDeferredDeserializeFunction()) { - DeferDeserializeFunctionInfo* deferDeserializeFunction = (DeferDeserializeFunctionInfo*) funcInfo; + DeferDeserializeFunctionInfo* deferDeserializeFunction = funcInfo->GetDeferDeserializeFunctionInfo(); // This is the first call to the function, ensure dynamic profile info // Deserialize is a no-op if the function has already been deserialized diff --git a/lib/Runtime/Library/JavascriptFunction.h b/lib/Runtime/Library/JavascriptFunction.h index 2712c910c90..d5a60fa9826 100644 --- a/lib/Runtime/Library/JavascriptFunction.h +++ b/lib/Runtime/Library/JavascriptFunction.h @@ -106,7 +106,7 @@ namespace Js #endif template static Var CallFunction(RecyclableObject* obj, JavascriptMethod entryPoint, Arguments args); - static Var CallSpreadFunction(RecyclableObject* obj, JavascriptMethod entryPoint, Arguments args, const Js::AuxArray *spreadIndices); + static Var CallSpreadFunction(RecyclableObject* obj, Arguments args, const Js::AuxArray *spreadIndices); static uint32 GetSpreadSize(const Arguments args, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext); static void SpreadArgs(const Arguments args, Arguments& destArgs, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext); static Var EntrySpreadCall(const Js::AuxArray *spreadIndices, RecyclableObject* function, CallInfo callInfo, ...); diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp index 5f3d6a5c704..014954df064 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp @@ -82,9 +82,9 @@ namespace Js return static_cast(var); } - JavascriptGeneratorFunction* JavascriptGeneratorFunction::OP_NewScGenFunc(FrameDisplay *environment, FunctionProxy** proxyRef) + JavascriptGeneratorFunction* JavascriptGeneratorFunction::OP_NewScGenFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) { - FunctionProxy* functionProxy = *proxyRef; + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); ScriptContext* scriptContext = functionProxy->GetScriptContext(); bool hasSuperReference = functionProxy->HasSuperReference(); diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.h b/lib/Runtime/Library/JavascriptGeneratorFunction.h index 615829324e9..31caacafde9 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.h +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.h @@ -33,7 +33,7 @@ namespace Js static JavascriptGeneratorFunction* FromVar(Var var); static bool Is(Var var); - static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionProxy** proxyRef); + static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionInfoPtrPtr infoRef); static Var EntryGeneratorFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryAsyncFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); static DWORD GetOffsetOfScriptFunction() { return offsetof(JavascriptGeneratorFunction, scriptFunction); } diff --git a/lib/Runtime/Library/JavascriptProxy.cpp b/lib/Runtime/Library/JavascriptProxy.cpp index 1d711814f96..febf7ad691f 100644 --- a/lib/Runtime/Library/JavascriptProxy.cpp +++ b/lib/Runtime/Library/JavascriptProxy.cpp @@ -1939,7 +1939,7 @@ namespace Js Var functionResult; if (spreadIndices != nullptr) { - functionResult = JavascriptFunction::CallSpreadFunction(this, this->GetEntryPoint(), args, spreadIndices); + functionResult = JavascriptFunction::CallSpreadFunction(this, args, spreadIndices); } else { diff --git a/lib/Runtime/Library/ScriptFunction.cpp b/lib/Runtime/Library/ScriptFunction.cpp index 7d27184060c..d18b6ebf4b5 100644 --- a/lib/Runtime/Library/ScriptFunction.cpp +++ b/lib/Runtime/Library/ScriptFunction.cpp @@ -32,11 +32,11 @@ namespace Js {} ScriptFunction::ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType) - : ScriptFunctionBase(deferredPrototypeType, proxy), + : ScriptFunctionBase(deferredPrototypeType, proxy->GetFunctionInfo()), environment((FrameDisplay*)&NullFrameDisplay), cachedScopeObj(nullptr), homeObj(nullptr), hasInlineCaches(false), hasSuperReference(false), isActiveScript(false) { - Assert(proxy->GetFunctionProxy() == proxy); + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); Assert(proxy->EnsureDeferredPrototypeType() == deferredPrototypeType); DebugOnly(VerifyEntryPoint()); @@ -60,10 +60,10 @@ namespace Js #endif } - ScriptFunction * ScriptFunction::OP_NewScFunc(FrameDisplay *environment, FunctionProxy** proxyRef) + ScriptFunction * ScriptFunction::OP_NewScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) { - AssertMsg(proxyRef!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); - FunctionProxy* functionProxy = (*proxyRef); + AssertMsg(infoRef!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); AssertMsg(functionProxy!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); ScriptContext* scriptContext = functionProxy->GetScriptContext(); @@ -260,31 +260,25 @@ namespace Js FunctionProxy * ScriptFunction::GetFunctionProxy() const { Assert(this->functionInfo->HasBody()); - return reinterpret_cast(this->functionInfo); + return this->functionInfo->GetFunctionProxy(); } JavascriptMethod ScriptFunction::UpdateUndeferredBody(FunctionBody* newFunctionInfo) { // Update deferred parsed/serialized function to the real function body Assert(this->functionInfo->HasBody()); - if (this->functionInfo != newFunctionInfo) - { - Assert(this->functionInfo->GetFunctionBody() == newFunctionInfo); - Assert(!newFunctionInfo->IsDeferred()); - DynamicType * type = this->GetDynamicType(); + Assert(this->functionInfo->GetFunctionBody() == newFunctionInfo); + Assert(!newFunctionInfo->IsDeferred()); - // If the type is shared, it must be the shared one in the old function proxy + DynamicType * type = this->GetDynamicType(); - DebugOnly(FunctionProxy * oldProxy = this->GetFunctionProxy()); - this->functionInfo = newFunctionInfo; + // If the type is shared, it must be the shared one in the old function proxy - if (type->GetIsShared()) - { - // if it is shared, it must still be the deferred prototype from the old proxy - Assert(type == oldProxy->GetDeferredPrototypeType()); + this->functionInfo = newFunctionInfo->GetFunctionInfo(); - // the type is still shared, we can't modify it, just migrate to the shared one in the function body - this->ReplaceType(newFunctionInfo->EnsureDeferredPrototypeType()); - } + if (type->GetIsShared()) + { + // the type is still shared, we can't modify it, just migrate to the shared one in the function body + this->ReplaceType(newFunctionInfo->EnsureDeferredPrototypeType()); } // The type has change from the default, it is not share, just use that one. @@ -297,8 +291,7 @@ namespace Js #endif Js::FunctionEntryPointInfo* defaultEntryPointInfo = newFunctionInfo->GetDefaultFunctionEntryPointInfo(); - JavascriptMethod thunkEntryPoint = this->UpdateThunkEntryPoint(defaultEntryPointInfo, - directEntryPoint); + JavascriptMethod thunkEntryPoint = this->UpdateThunkEntryPoint(defaultEntryPointInfo, directEntryPoint); this->GetScriptFunctionType()->SetEntryPointInfo(defaultEntryPointInfo); @@ -710,7 +703,7 @@ namespace Js uint totalCacheCount = isInstInlineCacheStart + isInstInlineCacheCount; if (this->GetHasInlineCaches() && this->m_inlineCaches && this->hasOwnInlineCaches) { - Js::ScriptContext* scriptContext = this->GetFunctionBody()->GetScriptContext(); + Js::ScriptContext* scriptContext = this->GetParseableFunctionInfo()->GetScriptContext(); uint i = 0; uint unregisteredInlineCacheCount = 0; uint plainInlineCacheEnd = rootObjectLoadInlineCacheStart; diff --git a/lib/Runtime/Library/ScriptFunction.h b/lib/Runtime/Library/ScriptFunction.h index e5410e99367..2689fda6bf7 100644 --- a/lib/Runtime/Library/ScriptFunction.h +++ b/lib/Runtime/Library/ScriptFunction.h @@ -47,7 +47,7 @@ namespace Js ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); static bool Is(Var func); static ScriptFunction * FromVar(Var func); - static ScriptFunction * OP_NewScFunc(FrameDisplay *environment, FunctionProxy** proxyRef); + static ScriptFunction * OP_NewScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef); ProxyEntryPointInfo* GetEntryPointInfo() const; FunctionEntryPointInfo* GetFunctionEntryPointInfo() const diff --git a/lib/Runtime/Library/StackScriptFunction.cpp b/lib/Runtime/Library/StackScriptFunction.cpp index 00b93184867..5b848ebf4ce 100644 --- a/lib/Runtime/Library/StackScriptFunction.cpp +++ b/lib/Runtime/Library/StackScriptFunction.cpp @@ -76,8 +76,9 @@ namespace Js Assert(ThreadContext::IsOnStack(stackScriptFunction)); Assert(stackScriptFunction->boxedScriptFunction == nullptr); - FunctionBody * functionParent = stackScriptFunction->GetFunctionBody()->GetStackNestedFuncParentStrongRef(); - Assert(functionParent != nullptr); + FunctionInfo * functionInfoParent = stackScriptFunction->GetFunctionBody()->GetStackNestedFuncParentStrongRef(); + Assert(functionInfoParent != nullptr); + FunctionBody * functionParent = functionInfoParent->GetFunctionBody(); ScriptContext * scriptContext = stackScriptFunction->GetScriptContext(); ScriptFunction * boxedFunction; @@ -124,14 +125,15 @@ namespace Js for (uint i = 0; i < current->GetNestedCount(); i++) { - FunctionProxy * nested = current->GetNestedFunc(i); - functionObjectToBox.Add(nested->GetFunctionProxy()); + FunctionProxy * nested = current->GetNestedFunctionProxy(i); + functionObjectToBox.Add(nested); if (nested->IsFunctionBody()) { nested->GetFunctionBody()->ClearStackNestedFuncParent(); } } - current = current->GetAndClearStackNestedFuncParent(); + FunctionInfo * functionInfo = current->GetAndClearStackNestedFuncParent(); + current = functionInfo ? functionInfo->GetFunctionBody() : nullptr; } while (current && current->DoStackNestedFunc()); } @@ -143,7 +145,7 @@ namespace Js bool StackScriptFunction::BoxState::NeedBoxScriptFunction(ScriptFunction * scriptFunction) { - return functionObjectToBox.Contains(scriptFunction->GetFunctionProxy()->GetFunctionProxy()); + return functionObjectToBox.Contains(scriptFunction->GetFunctionProxy()); } void StackScriptFunction::BoxState::Box() @@ -727,15 +729,14 @@ namespace Js Output::Flush(); } - // Make sure we use the latest function proxy (if it is parsed or deserialized) - FunctionProxy * functionBody = stackFunction->GetFunctionProxy()->GetFunctionProxy(); - boxedFunction = ScriptFunction::OP_NewScFunc(boxedFrameDisplay, &functionBody); + FunctionInfo * functionInfo = stackFunction->GetFunctionInfo(); + boxedFunction = ScriptFunction::OP_NewScFunc(boxedFrameDisplay, &functionInfo); stackFunction->boxedScriptFunction = boxedFunction; stackFunction->SetEnvironment(boxedFrameDisplay); return boxedFunction; } - ScriptFunction * StackScriptFunction::OP_NewStackScFunc(FrameDisplay *environment, FunctionProxy** proxyRef, ScriptFunction * stackFunction) + ScriptFunction * StackScriptFunction::OP_NewStackScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, ScriptFunction * stackFunction) { if (stackFunction) { @@ -743,7 +744,7 @@ namespace Js char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif - FunctionProxy* functionProxy = (*proxyRef); + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); AssertMsg(functionProxy != nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); Assert(stackFunction->GetFunctionInfo()->GetFunctionProxy() == functionProxy); Assert(!functionProxy->IsFunctionBody() || functionProxy->GetFunctionBody()->GetStackNestedFuncParentStrongRef() != nullptr); @@ -757,7 +758,7 @@ namespace Js functionProxy->GetDebugNumberSet(debugStringBuffer), stackFunction); return stackFunction; } - return ScriptFunction::OP_NewScFunc(environment, proxyRef); + return ScriptFunction::OP_NewScFunc(environment, infoRef); } #if ENABLE_TTD diff --git a/lib/Runtime/Library/StackScriptFunction.h b/lib/Runtime/Library/StackScriptFunction.h index 154cabf65b5..f31c344cd0c 100644 --- a/lib/Runtime/Library/StackScriptFunction.h +++ b/lib/Runtime/Library/StackScriptFunction.h @@ -16,7 +16,7 @@ namespace Js static JavascriptFunction * EnsureBoxed(BOX_PARAM(JavascriptFunction * function, void * returnAddress, char16 const * reason)); static void Box(FunctionBody * functionBody, ScriptFunction ** functionRef); - static ScriptFunction * OP_NewStackScFunc(FrameDisplay *environment, FunctionProxy** proxyRef, ScriptFunction * stackFunction); + static ScriptFunction * OP_NewStackScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, ScriptFunction * stackFunction); static uint32 GetOffsetOfBoxedScriptFunction() { return offsetof(StackScriptFunction, boxedScriptFunction); } static JavascriptFunction * GetCurrentFunctionObject(JavascriptFunction * function); diff --git a/lib/Runtime/Runtime.h b/lib/Runtime/Runtime.h index 823e89f35f5..2733c08fda0 100644 --- a/lib/Runtime/Runtime.h +++ b/lib/Runtime/Runtime.h @@ -243,6 +243,7 @@ namespace Js struct TickDelta; class ByteBlock; class FunctionInfo; + class FunctionProxy; class FunctionBody; class ParseableFunctionInfo; struct StatementLocation; diff --git a/lib/Runtime/SerializableFunctionFields.h b/lib/Runtime/SerializableFunctionFields.h index 50174c8e0fd..ca44565e88d 100644 --- a/lib/Runtime/SerializableFunctionFields.h +++ b/lib/Runtime/SerializableFunctionFields.h @@ -37,6 +37,7 @@ PROTECTED_FIELDS DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchLength, CharCount); // length of the function in code points (not bytes) DECLARE_SERIALIZABLE_FIELD(uint, m_cbLength, UInt32); // length of the function in bytes DECLARE_SERIALIZABLE_FIELD(uint, m_displayShortNameOffset, UInt32); // Offset into the display name where the short name is found + DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); PUBLIC_FIELDS DECLARE_SERIALIZABLE_FIELD(UINT, scopeSlotArraySize, UInt32); @@ -67,7 +68,6 @@ PRIVATE_FIELDS DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledReturnTypeCount, UInt16); DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSlotCount, UInt16); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LoopCount, RegSlot); - DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); DECLARE_SERIALIZABLE_FIELD(bool, m_hasFinally, Bool); DECLARE_SERIALIZABLE_FIELD(bool, hasScopeObject, Bool); DECLARE_SERIALIZABLE_FIELD(bool, hasCachedScopePropIds, Bool); diff --git a/lib/Runtime/Types/ScriptFunctionType.cpp b/lib/Runtime/Types/ScriptFunctionType.cpp index fd76a03654a..76c7eb57731 100644 --- a/lib/Runtime/Types/ScriptFunctionType.cpp +++ b/lib/Runtime/Types/ScriptFunctionType.cpp @@ -21,7 +21,7 @@ namespace Js ScriptFunctionType * ScriptFunctionType::New(FunctionProxy * proxy, bool isShared) { - Assert(proxy->GetFunctionProxy() == proxy); + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); ScriptContext * scriptContext = proxy->GetScriptContext(); JavascriptLibrary * library = scriptContext->GetLibrary(); DynamicObject * functionPrototype = proxy->IsAsync() ? library->GetAsyncFunctionPrototype() : library->GetFunctionPrototype(); diff --git a/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline b/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline index f3e73faeae7..301517f14c1 100644 --- a/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline +++ b/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline @@ -1,101 +1,94 @@ [ { - "this": "Object {...}", - "arguments": "Object {...}", "locals": { - "a": "undefined undefined" + "this": "{...}", + "arguments": "{...}", + "a": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "functionCallsReturn": { - "[Date returned]": "string " - }, "locals": { - "a": "string " + "this": "{...}", + "arguments": "{...}", + "a": "", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "[Return value]": "undefined undefined", - "functionCallsReturn": { - "[Echo returned]": "undefined undefined", - "[SetTimeout returned]": "number 1" - }, "locals": { - "a": "string " + "this": "{...}", + "[Echo returned]": "undefined", + "[SetTimeout returned]": "1", + "[Return value]": "undefined", + "arguments": "{...}", + "a": "", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", "locals": { - "arr": "undefined undefined", - "str": "undefined undefined", - "str1": "undefined undefined" + "this": "{...}", + "arguments": "{...}", + "arr": "undefined", + "str": "undefined", + "str1": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "functionCallsReturn": { - "[Array returned]": "Array [a,b]" - }, "locals": { - "arr": "Array [a,b]", - "str": "undefined undefined", - "str1": "undefined undefined" + "this": "{...}", + "arguments": "{...}", + "arr": "[a,b]", + "str": "undefined", + "str1": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "functionCallsReturn": { - "[push returned]": "number 3" - }, "locals": { - "arr": "Array [a,b,c]", - "str": "undefined undefined", - "str1": "undefined undefined" + "this": "{...}", + "[push returned]": "3", + "arguments": "{...}", + "arr": "[a,b,c]", + "str": "undefined", + "str1": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "functionCallsReturn": { - "[join returned]": "string a,b,c" - }, "locals": { - "arr": "Array [a,b,c]", - "str": "string a,b,c", - "str1": "undefined undefined" + "this": "{...}", + "[join returned]": "a,b,c", + "arguments": "{...}", + "arr": "[a,b,c]", + "str": "a,b,c", + "str1": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "functionCallsReturn": { - "[Array.prototype.ucase returned]": "undefined undefined" - }, "locals": { - "arr": "Array [A,B,C]", - "str": "string a,b,c", - "str1": "undefined undefined" + "this": "{...}", + "[Array.prototype.ucase returned]": "undefined", + "arguments": "{...}", + "arr": "[A,B,C]", + "str": "a,b,c", + "str1": "undefined", + "[Globals]": "" } }, { - "this": "Object {...}", - "arguments": "Object {...}", - "[Return value]": "undefined undefined", - "functionCallsReturn": { - "[join returned]": "string A,B,C" - }, "locals": { - "arr": "Array [A,B,C]", - "str": "string a,b,c", - "str1": "string All caps A,B,C" + "this": "{...}", + "[join returned]": "A,B,C", + "[Return value]": "undefined", + "arguments": "{...}", + "arr": "[A,B,C]", + "str": "a,b,c", + "str1": "", + "[Globals]": "" } } ] \ No newline at end of file diff --git a/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline b/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline index b488659c673..bd546940407 100644 --- a/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline +++ b/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline @@ -1,329 +1,100 @@ [ { - "callStack": [ + "callstack": [ { - "line": 27, - "column": 0, - "sourceText": "}", - "function": "bar" + "start": 794, + "length": 1, + "text": "}", + "frameDescription": "bar" }, { - "line": 13, - "column": 4, - "sourceText": "bar()", - "function": "foo" + "start": 514, + "length": 5, + "text": "bar()", + "frameDescription": "foo" }, { - "line": 35, - "column": 4, - "sourceText": "foo()", - "function": "Run" + "start": 919, + "length": 5, + "text": "foo()", + "frameDescription": "Run" } ] }, { - "this": { - "telemetryLog": { - "#__proto__": "function ", - "length": "number 3", - "name": "string telemetryLog", - "caller": "object null", - "arguments": "object null" - }, - "read": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string read", - "caller": "object null", - "arguments": "object null" - }, - "readbuffer": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string readbuffer", - "caller": "object null", - "arguments": "object null" - }, - "console": { - "#__proto__": "Object {...}", - "log": "function log" - }, - "foo": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string foo", - "caller": "function ", - "arguments": "Object {...}", - "length": "number 0" - }, - "bar": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string bar", - "caller": "function ", - "arguments": "Object {...}", - "length": "number 0" - }, - "Run": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string Run", - "caller": "object null", - "arguments": "Object {...}", - "length": "number 0" - } - }, - "arguments": { - "#__proto__": { - "constructor": "function ", - "hasOwnProperty": "function ", - "propertyIsEnumerable": "function ", - "isPrototypeOf": "function ", - "toLocaleString": "function ", - "toString": "function ", - "valueOf": "function ", - "#__proto__": "object null", - "__defineGetter__": "function ", - "__defineSetter__": "function ", - "__lookupGetter__": "function ", - "__lookupSetter__": "function " + "locals": { + "this": { + "[Methods]": { + "bar": "", + "foo": "", + "Run": "" + }, + "__proto__": { + "[Methods]": "{...}", + "__proto__": "null" + }, + "console": { + "[Methods]": "{...}", + "__proto__": "{...}" + } }, - "length": "number 0", - "callee": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string bar", - "caller": "function ", - "arguments": "Object {...}", - "length": "number 0" + "[Return value]": "undefined", + "arguments": { + "[Methods]": { + "callee": "", + "Symbol.iterator": "" + }, + "__proto__": { + "[Methods]": "{...}", + "__proto__": "null" + }, + "length": "0" }, - "Symbol.iterator": { - "#__proto__": "function ", - "length": "number 0", - "name": "string values", - "caller": "object null", - "arguments": "object null" - } - }, - "[Return value]": "undefined undefined", - "functionCallsReturn": { - "[Date returned]": { - "#__proto__": { - "#__proto__": "Object {...}", - "constructor": "function ", - "getDate": "function ", - "getDay": "function ", - "getFullYear": "function ", - "getHours": "function ", - "getMilliseconds": "function ", - "getMinutes": "function ", - "getMonth": "function ", - "getSeconds": "function ", - "getTime": "function ", - "getTimezoneOffset": "function ", - "getUTCDate": "function ", - "getUTCDay": "function ", - "getUTCFullYear": "function ", - "getUTCHours": "function ", - "getUTCMilliseconds": "function ", - "getUTCMinutes": "function ", - "getUTCMonth": "function ", - "getUTCSeconds": "function ", - "getVarDate": "function ", - "getYear": "function ", - "setDate": "function ", - "setFullYear": "function ", - "setHours": "function ", - "setMilliseconds": "function ", - "setMinutes": "function ", - "setMonth": "function ", - "setSeconds": "function ", - "setTime": "function ", - "setUTCDate": "function ", - "setUTCFullYear": "function ", - "setUTCHours": "function ", - "setUTCMilliseconds": "function ", - "setUTCMinutes": "function ", - "setUTCMonth": "function ", - "setUTCSeconds": "function ", - "setYear": "function ", - "toDateString": "function ", - "toISOString": "function ", - "toJSON": "function ", - "toLocaleDateString": "function ", - "toLocaleString": "function ", - "toLocaleTimeString": "function ", - "toString": "function ", - "toTimeString": "function ", - "toUTCString": "function ", - "toGMTString": "function ", - "valueOf": "function " - } - } - }, - "locals": { - "a": "string bar", + "a": "bar", "b": { - "#__proto__": { - "#__proto__": "Object {...}", - "constructor": "function ", - "push": "function ", - "concat": "function ", - "join": "function ", - "pop": "function ", - "reverse": "function ", - "shift": "function ", - "slice": "function ", - "sort": "function ", - "splice": "function ", - "toLocaleString": "function ", - "toString": "function ", - "unshift": "function ", - "indexOf": "function ", - "every": "function ", - "filter": "function ", - "forEach": "function ", - "lastIndexOf": "function ", - "map": "function ", - "reduce": "function ", - "reduceRight": "function ", - "some": "function ", - "find": "function ", - "findIndex": "function ", - "entries": "function ", - "keys": "function ", - "values": "function ", - "Symbol.iterator": "function ", - "Symbol.unscopables": "Object {...}", - "fill": "function ", - "copyWithin": "function ", - "includes": "function ", - "length": "number 0" + "__proto__": { + "[Methods]": "{...}", + "__proto__": "{...}", + "length": "0", + "Symbol.unscopables": "{...}" }, - "length": "number 0" + "length": "0" }, "c": { - "#__proto__": { - "#__proto__": "Object {...}", - "constructor": "function ", - "getDate": "function ", - "getDay": "function ", - "getFullYear": "function ", - "getHours": "function ", - "getMilliseconds": "function ", - "getMinutes": "function ", - "getMonth": "function ", - "getSeconds": "function ", - "getTime": "function ", - "getTimezoneOffset": "function ", - "getUTCDate": "function ", - "getUTCDay": "function ", - "getUTCFullYear": "function ", - "getUTCHours": "function ", - "getUTCMilliseconds": "function ", - "getUTCMinutes": "function ", - "getUTCMonth": "function ", - "getUTCSeconds": "function ", - "getVarDate": "function ", - "getYear": "function ", - "setDate": "function ", - "setFullYear": "function ", - "setHours": "function ", - "setMilliseconds": "function ", - "setMinutes": "function ", - "setMonth": "function ", - "setSeconds": "function ", - "setTime": "function ", - "setUTCDate": "function ", - "setUTCFullYear": "function ", - "setUTCHours": "function ", - "setUTCMilliseconds": "function ", - "setUTCMinutes": "function ", - "setUTCMonth": "function ", - "setUTCSeconds": "function ", - "setYear": "function ", - "toDateString": "function ", - "toISOString": "function ", - "toJSON": "function ", - "toLocaleDateString": "function ", - "toLocaleString": "function ", - "toLocaleTimeString": "function ", - "toString": "function ", - "toTimeString": "function ", - "toUTCString": "function ", - "toGMTString": "function ", - "valueOf": "function " + "__proto__": { + "[Methods]": "{...}", + "__proto__": "{...}" } - } - }, - "globals": { - "WScript": { - "#__proto__": "Object {...}", - "Echo": "function Echo", - "Quit": "function Quit", - "LoadScriptFile": "function LoadScriptFile", - "LoadScript": "function LoadScript", - "LoadModule": "function LoadModule", - "SetTimeout": "function SetTimeout", - "ClearTimeout": "function ClearTimeout", - "Attach": "function Attach", - "Detach": "function Detach", - "DumpFunctionPosition": "function ", - "RequestAsyncBreak": "function ", - "LoadBinaryFile": "function LoadBinaryFile", - "LoadTextFile": "function LoadTextFile", - "Edit": "function Edit", - "Platform": "Object {...}", - "Arguments": "Array []" - }, - "print": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string print", - "caller": "object null", - "arguments": "object null" - }, - "read": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string read", - "caller": "object null", - "arguments": "object null" - }, - "readbuffer": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string readbuffer", - "caller": "object null", - "arguments": "object null" }, - "console": { - "#__proto__": "Object {...}", - "log": "function log" - }, - "foo": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string foo", - "caller": "function ", - "arguments": "Object {...}", - "length": "number 0" - }, - "bar": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string bar", - "caller": "function ", - "arguments": "Object {...}", - "length": "number 0" - }, - "Run": { - "#__proto__": "function ", - "prototype": "Object {...}", - "name": "string Run", - "caller": "object null", - "arguments": "Object {...}", - "length": "number 0" + "[Globals]": { + "console": { + "[Methods]": "{...}", + "__proto__": "{...}" + }, + "foo": { + "[Methods]": "{...}", + "__proto__": "", + "arguments": "{...}", + "length": "0", + "name": "foo", + "prototype": "{...}" + }, + "bar": { + "[Methods]": "{...}", + "__proto__": "", + "arguments": "{...}", + "length": "0", + "name": "bar", + "prototype": "{...}" + }, + "Run": { + "__proto__": "", + "arguments": "{...}", + "caller": "null", + "length": "0", + "name": "Run", + "prototype": "{...}" + } } } }