diff --git a/packages/contract-artifacts/CHANGELOG.json b/packages/contract-artifacts/CHANGELOG.json index 19269627cf..2dc7f74a35 100644 --- a/packages/contract-artifacts/CHANGELOG.json +++ b/packages/contract-artifacts/CHANGELOG.json @@ -5,6 +5,10 @@ { "note": "Add `IZeroEx` artifact", "pr": 2626 + }, + { + "note": "Update `ERC20BridgeSampler` artifact", + "pr": 2633 } ] }, diff --git a/packages/contract-artifacts/artifacts/ERC20BridgeSampler.json b/packages/contract-artifacts/artifacts/ERC20BridgeSampler.json index 74746d3371..e8eac88ee2 100644 --- a/packages/contract-artifacts/artifacts/ERC20BridgeSampler.json +++ b/packages/contract-artifacts/artifacts/ERC20BridgeSampler.json @@ -98,7 +98,16 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "curveAddress", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "poolAddress", "type": "address" }, + { "internalType": "bytes4", "name": "sellQuoteFunctionSelector", "type": "bytes4" }, + { "internalType": "bytes4", "name": "buyQuoteFunctionSelector", "type": "bytes4" } + ], + "internalType": "struct CurveSampler.CurveInfo", + "name": "curveInfo", + "type": "tuple" + }, { "internalType": "int128", "name": "fromTokenIdx", "type": "int128" }, { "internalType": "int128", "name": "toTokenIdx", "type": "int128" }, { "internalType": "uint256[]", "name": "makerTokenAmounts", "type": "uint256[]" } @@ -127,16 +136,7 @@ "inputs": [ { "internalType": "address", "name": "takerToken", "type": "address" }, { "internalType": "address", "name": "makerToken", "type": "address" }, - { "internalType": "uint256[]", "name": "makerTokenAmounts", "type": "uint256[]" }, - { - "components": [ - { "internalType": "uint256", "name": "targetSlippageBps", "type": "uint256" }, - { "internalType": "uint256", "name": "maxIterations", "type": "uint256" } - ], - "internalType": "struct IERC20BridgeSampler.FakeBuyOptions", - "name": "opts", - "type": "tuple" - } + { "internalType": "uint256[]", "name": "makerTokenAmounts", "type": "uint256[]" } ], "name": "sampleBuysFromKyberNetwork", "outputs": [{ "internalType": "uint256[]", "name": "takerTokenAmounts", "type": "uint256[]" }], @@ -150,16 +150,7 @@ { "internalType": "address", "name": "registryAddress", "type": "address" }, { "internalType": "address", "name": "takerToken", "type": "address" }, { "internalType": "address", "name": "makerToken", "type": "address" }, - { "internalType": "uint256[]", "name": "makerTokenAmounts", "type": "uint256[]" }, - { - "components": [ - { "internalType": "uint256", "name": "targetSlippageBps", "type": "uint256" }, - { "internalType": "uint256", "name": "maxIterations", "type": "uint256" } - ], - "internalType": "struct IERC20BridgeSampler.FakeBuyOptions", - "name": "opts", - "type": "tuple" - } + { "internalType": "uint256[]", "name": "makerTokenAmounts", "type": "uint256[]" } ], "name": "sampleBuysFromLiquidityProviderRegistry", "outputs": [{ "internalType": "uint256[]", "name": "takerTokenAmounts", "type": "uint256[]" }], @@ -195,7 +186,16 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "curveAddress", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "poolAddress", "type": "address" }, + { "internalType": "bytes4", "name": "sellQuoteFunctionSelector", "type": "bytes4" }, + { "internalType": "bytes4", "name": "buyQuoteFunctionSelector", "type": "bytes4" } + ], + "internalType": "struct CurveSampler.CurveInfo", + "name": "curveInfo", + "type": "tuple" + }, { "internalType": "int128", "name": "fromTokenIdx", "type": "int128" }, { "internalType": "int128", "name": "toTokenIdx", "type": "int128" }, { "internalType": "uint256[]", "name": "takerTokenAmounts", "type": "uint256[]" } @@ -334,10 +334,10 @@ }, "return": "orderFillableTakerAssetAmounts How much taker asset can be filled by each order in `orders`." }, - "sampleBuysFromCurve(address,int128,int128,uint256[])": { + "sampleBuysFromCurve((address,bytes4,bytes4),int128,int128,uint256[])": { "details": "Sample buy quotes from Curve.", "params": { - "curveAddress": "Address of the Curve contract.", + "curveInfo": "Curve information specific to this token pair.", "fromTokenIdx": "Index of the taker token (what to sell).", "makerTokenAmounts": "Maker token buy amount for each sample.", "toTokenIdx": "Index of the maker token (what to buy)." @@ -353,22 +353,20 @@ }, "return": "takerTokenAmounts Taker amounts sold at each maker token amount." }, - "sampleBuysFromKyberNetwork(address,address,uint256[],(uint256,uint256))": { + "sampleBuysFromKyberNetwork(address,address,uint256[])": { "details": "Sample buy quotes from Kyber.", "params": { "makerToken": "Address of the maker token (what to buy).", "makerTokenAmounts": "Maker token buy amount for each sample.", - "opts": "`FakeBuyOptions` specifying target slippage and max iterations.", "takerToken": "Address of the taker token (what to sell)." }, "return": "takerTokenAmounts Taker amounts sold at each maker token amount." }, - "sampleBuysFromLiquidityProviderRegistry(address,address,address,uint256[],(uint256,uint256))": { + "sampleBuysFromLiquidityProviderRegistry(address,address,address,uint256[])": { "details": "Sample buy quotes from an arbitrary on-chain liquidity provider.", "params": { "makerToken": "Address of the maker token (what to buy).", "makerTokenAmounts": "Maker token buy amount for each sample.", - "opts": "`FakeBuyOptions` specifying target slippage and max iterations.", "registryAddress": "Address of the liquidity provider registry contract.", "takerToken": "Address of the taker token (what to sell)." }, @@ -391,10 +389,10 @@ }, "return": "takerTokenAmounts Taker amounts sold at each maker token amount." }, - "sampleSellsFromCurve(address,int128,int128,uint256[])": { + "sampleSellsFromCurve((address,bytes4,bytes4),int128,int128,uint256[])": { "details": "Sample sell quotes from Curve.", "params": { - "curveAddress": "Address of the Curve contract.", + "curveInfo": "Curve information specific to this token pair.", "fromTokenIdx": "Index of the taker token (what to sell).", "takerTokenAmounts": "Taker token sell amount for each sample.", "toTokenIdx": "Index of the maker token (what to buy)." @@ -471,10 +469,10 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b5061447d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806368be3cf2116100b2578063abffc76111610081578063d0eea06d11610066578063d0eea06d14610288578063e68248f71461029b578063e9a8e442146102ae57610136565b8063abffc76114610255578063c7f7142e1461026857610136565b806368be3cf2146101fc5780636dd6b78d1461021c57806398cdafba1461022f5780639f76ad351461024257610136565b80634703a7e61161010957806358306ba0116100ee57806358306ba0146101c357806360ee052a146101d657806364ee6ade146101e957610136565b80634703a7e61461019d5780634cb8e253146101b057610136565b80631796fb871461013b5780632d753aa414610164578063354152a31461017757806339b085ad1461018a575b600080fd5b61014e6101493660046139e0565b6102c1565b60405161015b91906140df565b60405180910390f35b61014e610172366004613691565b610492565b61014e6101853660046139e0565b610688565b61014e610198366004613be0565b610842565b61014e6101ab36600461380f565b610aff565b61014e6101be36600461380f565b610cdb565b61014e6101d1366004613717565b610e0e565b61014e6101e436600461380f565b610ea5565b61014e6101f736600461380f565b61115a565b61020f61020a366004613b74565b611320565b60405161015b9190614061565b61014e61022a36600461380f565b611466565b61014e61023d36600461378a565b61170e565b61014e610250366004613717565b611748565b61014e610263366004613a1e565b61194c565b61027b610276366004613647565b611b37565b60405161015b9190613e5f565b61014e61029636600461386f565b611c72565b61014e6102a9366004613a1e565b611ca3565b61014e6102bc366004613be0565b611e76565b6060600082519050806040519080825280602002602001820160405280156102f3578160200160208202803883390190505b50915060005b8181101561048857600060608873ffffffffffffffffffffffffffffffffffffffff16620927c0600073ffffffffffffffffffffffffffffffffffffffff16630e71d1b9905060e01b8a8a8a888151811061035057fe5b602002602001015160405160240161036a93929190614121565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516103f39190613e43565b6000604051808303818686fa925050503d806000811461042f576040519150601f19603f3d011682016040523d82523d6000602084013e610434565b606091505b5090925090506000821561045d57818060200190516104569190810190613ca2565b9050610465565b505050610488565b8086858151811061047257fe5b60209081029190910101525050506001016102f9565b5050949350505050565b6060600082519050806040519080825280602002602001820160405280156104c4578160200160208202803883390190505b50915073ffffffffffffffffffffffffffffffffffffffff87166104e8575061067f565b60005b8181101561067c57600060608973ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff16636e79e133905060e01b8b8b8b8b898151811061054357fe5b602002602001015160405160240161055e9493929190613ee8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516105e79190613e43565b6000604051808303818686fa925050503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b50909250905060008215610651578180602001905161064a9190810190613ca2565b9050610659565b50505061067c565b8086858151811061066657fe5b60209081029190910101525050506001016104eb565b50505b95945050505050565b6060600082519050806040519080825280602002602001820160405280156106ba578160200160208202803883390190505b50915060005b8181101561048857600060608873ffffffffffffffffffffffffffffffffffffffff16620927c0600073ffffffffffffffffffffffffffffffffffffffff166307211ef7905060e01b8a8a8a888151811061071757fe5b602002602001015160405160240161073193929190614121565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516107ba9190613e43565b6000604051808303818686fa925050503d80600081146107f6576040519150601f19603f3d011682016040523d82523d6000602084013e6107fb565b606091505b5090925090506000821561045d578180602001905161081d9190810190613ca2565b90508086858151811061082c57fe5b60209081029190910101525050506001016106c0565b6060835160405190808252806020026020018201604052801561086f578160200160208202803883390190505b50905060005b84518114610af75783818151811061088957fe5b602002602001015151600014806108b757508481815181106108a757fe5b6020026020010151608001516000145b806108d957508481815181106108c957fe5b602002602001015160a001516000145b156108fd5760008282815181106108ec57fe5b602002602001018181525050610aef565b600060608473ffffffffffffffffffffffffffffffffffffffff166207a1208673ffffffffffffffffffffffffffffffffffffffff1663e77286eb905060e01b89868151811061094957fe5b602002602001015189878151811061095d57fe5b602002602001015160405160240161097692919061419c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516109ff9190613e43565b6000604051808303818686fa925050503d8060008114610a3b576040519150601f19603f3d011682016040523d82523d6000602084013e610a40565b606091505b509150915081610a6b576000848481518110610a5857fe5b6020026020010181815250505050610aef565b610a73613340565b60008083806020019051610a8a9190810190613d27565b91945092509050600383516006811115610aa057fe5b141580610aab575080155b15610acf576000878781518110610abe57fe5b602002602001018181525050610ae9565b81878781518110610adc57fe5b6020026020010181815250505b50505050505b600101610875565b509392505050565b6060610b0b8385611f19565b8151604080518281526020808402820101909152818015610b36578160200160208202803883390190505b50915060005b81811015610cd25760006060610b50611f8c565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663ff1fd974905060e01b8a8a8a8881518110610b9a57fe5b6020026020010151604051602401610bb493929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610c3d9190613e43565b6000604051808303818686fa925050503d8060008114610c79576040519150601f19603f3d011682016040523d82523d6000602084013e610c7e565b606091505b50909250905060008215610ca75781806020019051610ca09190810190613ca2565b9050610caf565b505050610cd2565b80868581518110610cbc57fe5b6020908102919091010152505050600101610b3c565b50509392505050565b6060610ce78385611f19565b8151604080518281526020808402820101909152818015610d12578160200160208202803883390190505b5091506000610d1f611fa4565b90506000805b83811015610e03578273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480610d9257508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15610dbc57610db58888888481518110610da857fe5b6020026020010151611fbc565b9150610de3565b610dcd8884888481518110610da857fe5b91508115610de357610de0838884611fbc565b91505b81858281518110610df057fe5b6020908102919091010152600101610d25565b505050509392505050565b60608273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610e7557508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610e7f57610e9d565b6060610e8c86858561115a565b9050610e9984868361115a565b9150505b949350505050565b6060610eb18385611f19565b8151604080518281526020808402820101909152818015610edc578160200160208202803883390190505b5091506000610ee9611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610f2957610f24866127dc565b610f2c565b60005b90506000610f38611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610f7857610f73866127dc565b610f7b565b60005b905060005b83811015610e03576001610f92611fa4565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156110295786516110089085907f2640f62c00000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b6020026020010151612874565b87848151811061101457fe5b60200260200101819350828152505050611146565b611031611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561109a5786516110089084907f59e9486200000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b86516000906110d39085907f59e9486200000000000000000000000000000000000000000000000000000000908b9087908110610ffb57fe5b92509050801561112957611108857f2640f62c0000000000000000000000000000000000000000000000000000000083612874565b88858151811061111457fe5b60200260200101819450828152505050611144565b600087848151811061113757fe5b6020026020010181815250505b505b806111515750610e03565b50600101610f80565b60606111668385611f19565b8151604080518281526020808402820101909152818015611191578160200160208202803883390190505b50915060005b81811015610cd257600060606111ab611f8c565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663144a2752905060e01b898b8a88815181106111f557fe5b602002602001015160405160240161120f93929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516112989190613e43565b6000604051808303818686fa925050503d80600081146112d4576040519150601f19603f3d011682016040523d82523d6000602084013e6112d9565b606091505b50909250905060008215610ca757818060200190516112fb9190810190613ca2565b90508086858151811061130a57fe5b6020908102919091010152505050600101611197565b60408051828152602080840282010190915260609082801561135657816020015b60608152602001906001900390816113415790505b50905060005b80831461145f57600060603086868581811061137457fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368490030181126113ae57600080fd5b9091016020810191503567ffffffffffffffff8111156113cd57600080fd5b368190038213156113dd57600080fd5b6040516113eb929190613e33565b600060405180830381855afa9150503d8060008114611426576040519150601f19603f3d011682016040523d82523d6000602084013e61142b565b606091505b50915091508161143d57805160208201fd5b8084848151811061144a57fe5b6020908102919091010152505060010161135c565b5092915050565b60606114728385611f19565b815160408051828152602080840282010190915281801561149d578160200160208202803883390190505b50915060006114aa611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146114ea576114e5866127dc565b6114ed565b60005b905060006114f9611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461153957611534866127dc565b61153c565b60005b905060005b83811015610e03576001611553611fa4565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156115dd5786516115bc9085907f95b68fe700000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b8784815181106115c857fe5b602002602001018193508281525050506116fa565b6115e5611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561164e5786516115bc9084907fcd7724c300000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b86516000906116879086907f95b68fe700000000000000000000000000000000000000000000000000000000908b9087908110610ffb57fe5b9250905080156116dd576116bc847fcd7724c30000000000000000000000000000000000000000000000000000000083612874565b8885815181106116c857fe5b602002602001018194508281525050506116f8565b60008784815181106116eb57fe5b6020026020010181815250505b505b806117055750610e03565b50600101611541565b606061173e858585857f9f76ad35000000000000000000000000000000000000000000000000000000008b6129bd565b9695505050505050565b60606000825190508060405190808252806020026020018201604052801561177a578160200160208202803883390190505b509150600061178a878787611b37565b905073ffffffffffffffffffffffffffffffffffffffff81166117af5750610e9d9050565b60005b8281101561194157600060608373ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff1663343fbcdd905060e01b8b8b8b888151811061180957fe5b602002602001015160405160240161182393929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516118ac9190613e43565b6000604051808303818686fa925050503d80600081146118e8576040519150601f19603f3d011682016040523d82523d6000602084013e6118ed565b606091505b50909250905060008215611916578180602001905161190f9190810190613ca2565b905061191e565b505050611941565b8087858151811061192b57fe5b60209081029190910101525050506001016117b2565b505050949350505050565b60606000825190508060405190808252806020026020018201604052801561197e578160200160208202803883390190505b50915060005b81811015611b2f5760006060611998612b83565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f905060e01b8886815181106119e057fe5b60200260200101518a6040516024016119fa9291906142ee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611a839190613e43565b6000604051808303818686fa925050503d8060008114611abf576040519150601f19603f3d011682016040523d82523d6000602084013e611ac4565b606091505b50909250905060008215611b045781806020019051611ae69190810190613ae1565b600189510381518110611af557fe5b60200260200101519050611b0c565b505050611b2f565b80868581518110611b1957fe5b6020908102919091010152505050600101611984565b505092915050565b6040516000906060907f153f59970000000000000000000000000000000000000000000000000000000090611b729086908690602401613e80565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608673ffffffffffffffffffffffffffffffffffffffff1683604051611bfa9190613e43565b600060405180830381855afa9150503d8060008114611c35576040519150601f19603f3d011682016040523d82523d6000602084013e611c3a565b606091505b5091509150818015611c4d575080516020145b15611c6757611c5d81600c612b9b565b9350505050611c6b565b5050505b9392505050565b606061067f858585857f4cb8e2530000000000000000000000000000000000000000000000000000000060006129bd565b606060008251905080604051908082528060200260200182016040528015611cd5578160200160208202803883390190505b50915060005b81811015611b2f5760006060611cef612b83565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff16631f00ca74905060e01b888681518110611d3757fe5b60200260200101518a604051602401611d519291906142ee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611dda9190613e43565b6000604051808303818686fa925050503d8060008114611e16576040519150601f19603f3d011682016040523d82523d6000602084013e611e1b565b606091505b50909250905060008215611b045781806020019051611e3d9190810190613ae1565b600081518110611e4957fe5b6020026020010151905080868581518110611e6057fe5b6020908102919091010152505050600101611cdb565b6060611e83848484610842565b905060005b8451811015610af757818181518110611e9d57fe5b6020026020010151600014611f1157611ef8828281518110611ebb57fe5b6020026020010151868381518110611ecf57fe5b602002602001015160a00151878481518110611ee757fe5b602002602001015160800151612be0565b828281518110611f0457fe5b6020026020010181815250505b600101611e88565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061413f565b60405180910390fd5b5050565b73794e6e91555438afc3ccf1c5076a74f42133d08d90565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b6000806000611fc9612c22565b9150915060608173ffffffffffffffffffffffffffffffffffffffff16633d3dc52c611ff3611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161461202b578861202d565b875b6040518263ffffffff1660e01b81526004016120499190613e5f565b60006040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526120bb9190810190613ae1565b604080516000808252602082019092529192505b8251811015612374576040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061213e907331e085afd48a1d6e51cc193153d625e8f0514c7f90600401613e5f565b60206040518083038186803b15801561215657600080fd5b505afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061218e9190810190613ca2565b83828151811061219a57fe5b6020026020010151148061227557506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061220f907310908c875d865c66f271f5d3949848971c9595c990600401613e5f565b60206040518083038186803b15801561222757600080fd5b505afa15801561223b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061225f9190810190613ca2565b83828151811061226b57fe5b6020026020010151145b8061234757506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b906122e190731e158c0e93c30d24e918ef83d1e0be23595c3c0f90600401613e5f565b60206040518083038186803b1580156122f957600080fd5b505afa15801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123319190810190613ca2565b83828151811061233d57fe5b6020026020010151145b1561236c576123698284838151811061235c57fe5b6020026020010151612d56565b91505b6001016120cf565b50606061237f611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415612496578473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8960028560006040519080825280602002602001820160405280156123fd578160200160208202803883390190505b506040518563ffffffff1660e01b815260040161241d9493929190613fdc565b60006040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261248f9190810190613cba565b9050612576565b8473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8a60028560006040519080825280602002602001820160405280156124e1578160200160208202803883390190505b506040518563ffffffff1660e01b81526004016125019493929190613fdc565b60006040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125739190810190613cba565b90505b60006060612582612dec565b73ffffffffffffffffffffffffffffffffffffffff166216e3607f418436bc000000000000000000000000000000000000000000000000000000006125c5611fa4565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff16146125fd578d612613565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b61261b611fa4565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612653578d612669565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b8d600089604051602401612681959493929190613f89565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161270a9190613e43565b6000604051808303818686fa925050503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b50909250905060008215612774578180602001905161276d9190810190613ca2565b9050612785565b600098505050505050505050611c6b565b60006127908c612e04565b60ff16905060006127a08e612e04565b60ff169050670de0b6b3a764000081600a0a83600a0a8e860202816127c157fe5b04816127c957fe5b049e9d5050505050505050505050505050565b60006127e6612e0f565b73ffffffffffffffffffffffffffffffffffffffff166306f2bf62836040518263ffffffff1660e01b815260040161281e9190613e5f565b60206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061286e919081019061362b565b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff8516612897576129b5565b60608573ffffffffffffffffffffffffffffffffffffffff16620249f086866040516024016128c691906142e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161294f9190613e43565b6000604051808303818686fa925050503d806000811461298b576040519150601f19603f3d011682016040523d82523d6000602084013e612990565b606091505b50909250905081156129b357808060200190516129b09190810190613ca2565b92505b505b935093915050565b60606129c98688611f19565b84516129d45761173e565b60008060008751604051908082528060200260200182016040528015612a04578160200160208202803883390190505b509350612a28898b8a600081518110612a1957fe5b60200260200101518989612e27565b925082612a38575061173e915050565b612a458a8a858989612e27565b915081612a55575061173e915050565b60005b8851811015612b755760005b8860200151811015612b3757612a8e8a8381518110612a7f57fe5b60200260200101518587612be0565b9450612aa589600001516127100161271087612be0565b94506000612ab68d8d888c8c612e27565b905080612ac35750612b37565b8094508a8381518110612ad257fe5b60200260200101518510612b2e5760008b8481518110612aee57fe5b60200260200101518c8581518110612b0257fe5b602002602001015187036127100281612b1757fe5b0490508a600001518111612b2c575050612b37565b505b50600101612a64565b50612b56898281518110612b4757fe5b60200260200101518486612be0565b858281518110612b6257fe5b6020908102919091010152600101612a58565b505050509695505050505050565b73f164fc0ec4e93095b804a4795bbe1e041497b92a90565b60008160140183511015612bc157612bc1612bbc60048551856014016130dc565b613181565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6000610e9d83612c16612bfa82600163ffffffff61318916565b612c0a888763ffffffff6131a816565b9063ffffffff6131d916565b9063ffffffff6131f516565b600080612c2d612dec565b73ffffffffffffffffffffffffffffffffffffffff1663b78b842d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c7257600080fd5b505afa158015612c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612caa919081019061362b565b73ffffffffffffffffffffffffffffffffffffffff1663c3a2a93a6040518163ffffffff1660e01b815260040160006040518083038186803b158015612cef57600080fd5b505afa158015612d03573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612d4991908101906138e1565b5091955093505050509091565b60608251600101604051908082528060200260200182016040528015612d86578160200160208202803883390190505b50905060005b8351811015612dc857838181518110612da157fe5b6020026020010151828281518110612db557fe5b6020908102919091010152600101612d8c565b508181600183510381518110612dda57fe5b60200260200101818152505092915050565b739aab3f75489902f3a48495025729a0af77d4b11e90565b600061286e8261321f565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9590565b6040805160018082528183019092526000916060918291602080830190803883390190505090508581600081518110612e5c57fe5b60209081029190910101527fffffffff0000000000000000000000000000000000000000000000000000000085167f4cb8e253000000000000000000000000000000000000000000000000000000001415612f6c576040517f4cb8e2530000000000000000000000000000000000000000000000000000000090612ee8908a908a908590602401613f1f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150613025565b6040517f9f76ad350000000000000000000000000000000000000000000000000000000090612fa59086908b908b908690602401613ea7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915291505b600060603073ffffffffffffffffffffffffffffffffffffffff168460405161304e9190613e43565b600060405180830381855afa9150503d8060008114613089576040519150601f19603f3d011682016040523d82523d6000602084013e61308e565b606091505b5091509150816130a557600094505050505061067f565b808060200190516130b99190810190613ae1565b6000815181106130c557fe5b602002602001015194505050505095945050505050565b6060632800659560e01b8484846040516024016130fb93929190614113565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b6000828211156131a2576131a2612bbc600285856132f0565b50900390565b6000826131b75750600061286e565b828202828482816131c457fe5b0414611c6b57611c6b612bbc600186866132f0565b600082820183811015611c6b57611c6b612bbc600086866132f0565b60008161320b5761320b612bbc600385856132f0565b600082848161321657fe5b04949350505050565b600060129050600060608373ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600481526020017f313ce567000000000000000000000000000000000000000000000000000000008152506040516132839190613e43565b600060405180830381855afa9150503d80600081146132be576040519150601f19603f3d011682016040523d82523d6000602084013e6132c3565b606091505b50915091508180156132d6575080516020145b156132e9576132e681600061330f565b92505b5050919050565b606063e946c1bb60e01b8484846040516024016130fb939291906140f2565b6000611c6b83836000816020018351101561333757613337612bbc60058551856020016130dc565b50016020015190565b6040805160608101909152806000815260006020820181905260409091015290565b803561286e81614418565b805161286e81614418565b600082601f830112613388578081fd5b813561339b61339682614379565b614352565b8181529150602080830190840160005b838110156133d8576133c3876020843589010161344b565b835260209283019291909101906001016133ab565b5050505092915050565b600082601f8301126133f2578081fd5b813561340061339682614379565b81815291506020808301908481018184028601820187101561342157600080fd5b60005b8481101561344057813584529282019290820190600101613424565b505050505092915050565b600082601f83011261345b578081fd5b813561346961339682614399565b915080825283602082850101111561348057600080fd5b8060208401602084013760009082016020015292915050565b8035600f81900b811461286e57600080fd5b6000604082840312156134bc578081fd5b6134c66040614352565b9050813581526020820135602082015292915050565b60006101c08083850312156134ef578182fd5b6134f881614352565b9150506135058383613362565b81526135148360208401613362565b60208201526135268360408401613362565b60408201526135388360608401613362565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561359a57600080fd5b6135a68683870161344b565b838501526101609250828501359150808211156135c257600080fd5b6135ce8683870161344b565b838501526101809250828501359150808211156135ea57600080fd5b6135f68683870161344b565b838501526101a092508285013591508082111561361257600080fd5b5061361f8582860161344b565b82840152505092915050565b60006020828403121561363c578081fd5b8151611c6b81614418565b60008060006060848603121561365b578182fd5b833561366681614418565b9250602084013561367681614418565b9150604084013561368681614418565b809150509250925092565b600080600080600060a086880312156136a8578283fd5b85356136b381614418565b945060208601356136c381614418565b935060408601356136d381614418565b925060608601356136e381614418565b9150608086013567ffffffffffffffff8111156136fe578182fd5b61370a888289016133e2565b9150509295509295909350565b6000806000806080858703121561372c578182fd5b843561373781614418565b9350602085013561374781614418565b9250604085013561375781614418565b9150606085013567ffffffffffffffff811115613772578182fd5b61377e878288016133e2565b91505092959194509250565b600080600080600060c086880312156137a1578283fd5b85356137ac81614418565b945060208601356137bc81614418565b935060408601356137cc81614418565b9250606086013567ffffffffffffffff8111156137e7578182fd5b6137f3888289016133e2565b92505061380387608088016134ab565b90509295509295909350565b600080600060608486031215613823578081fd5b833561382e81614418565b9250602084013561383e81614418565b9150604084013567ffffffffffffffff811115613859578182fd5b613865868287016133e2565b9150509250925092565b60008060008060a08587031215613884578182fd5b843561388f81614418565b9350602085013561389f81614418565b9250604085013567ffffffffffffffff8111156138ba578283fd5b6138c6878288016133e2565b9250506138d686606087016134ab565b905092959194509250565b60008060008060008060c087890312156138f9578384fd5b865161390481614418565b8096505060208088015161391781614418565b604089015190965061392881614418565b606089015190955061393981614418565b608089015190945061394a81614418565b60a089015190935067ffffffffffffffff811115613966578283fd5b8089018a601f820112613977578384fd5b8051915061398761339683614379565b82815283810190828501858502840186018e10156139a3578687fd5b8693505b848410156139cd576139b98e8261336d565b8352600193909301929185019185016139a7565b5080955050505050509295509295509295565b600080600080608085870312156139f5578182fd5b8435613a0081614418565b9350613a0f8660208701613499565b92506137578660408701613499565b60008060408385031215613a30578182fd5b823567ffffffffffffffff80821115613a47578384fd5b81850186601f820112613a58578485fd5b80359250613a6861339684614379565b80848252602080830192508084018a828389028701011115613a88578889fd5b8894505b86851015613ab3578035613a9f81614418565b845260019490940193928101928101613a8c565b509096508701359350505080821115613aca578283fd5b50613ad7858286016133e2565b9150509250929050565b60006020808385031215613af3578182fd5b825167ffffffffffffffff811115613b09578283fd5b80840185601f820112613b1a578384fd5b80519150613b2a61339683614379565b8281528381019082850185850284018601891015613b46578687fd5b8693505b84841015613b68578051835260019390930192918501918501613b4a565b50979650505050505050565b60008060208385031215613b86578182fd5b823567ffffffffffffffff80821115613b9d578384fd5b81850186601f820112613bae578485fd5b8035925081831115613bbe578485fd5b8660208085028301011115613bd1578485fd5b60200196919550909350505050565b600080600060608486031215613bf4578081fd5b833567ffffffffffffffff80821115613c0b578283fd5b81860187601f820112613c1c578384fd5b80359250613c2c61339684614379565b83815260208082019190838101875b87811015613c6457613c528d8484358901016134dc565b85529382019390820190600101613c3b565b50919850890135945050505080821115613c7c578283fd5b50613c8986828701613378565b925050613c998560408601613362565b90509250925092565b600060208284031215613cb3578081fd5b5051919050565b600060208284031215613ccb578081fd5b815167ffffffffffffffff811115613ce1578182fd5b80830184601f820112613cf2578283fd5b80519150613d0261339683614399565b828152856020848401011115613d16578384fd5b61067f8360208301602085016143db565b600080600083850360a0811215613d3c578182fd5b6060811215613d49578182fd5b50613d546060614352565b845160078110613d62578283fd5b815260208581015190820152604080860151908201526060850151608086015191945092508015158114613686578182fd5b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b82811015613ddf578151865260209586019590910190600101613dc1565b5093949350505050565b60008151808452613e018160208601602086016143db565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b60008251613e558184602087016143db565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401528085166040840152506080606083015261173e6080830184613dae565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152606081019190915260800190565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015261067f6060830184613dae565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260ff8416606083015260a06080830152613fd160a0830184613de9565b979650505050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526140048661440b565b60208381018790526080604085015285519182905285019060a0840190835b81811015614041578351835260209384019390920191600101614023565b505083810360608501526140558186613dae565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156140d2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526140c0858351613de9565b94509285019290850190600101614086565b5092979650505050505050565b600060208252611c6b6020830184613dae565b606081016140ff8561440b565b938152602081019290925260409091015290565b60608101600885106140ff57fe5b600f93840b81529190920b6020820152604081019190915260600190565b60208082526025908201527f455243323042726964676553616d706c65722f494e56414c49445f544f4b454e60408201527f5f50414952000000000000000000000000000000000000000000000000000000606082015260800190565b6000604082526141b0604083018551613d94565b60208401516141c26060840182613d94565b5060408401516141d56080840182613d94565b5060608401516141e860a0840182613d94565b50608084015160c083015260a084015160e083015260c0840151610100818185015260e086015191506101208281860152818701519250610140915082828601528087015192505061016082818601528187015192506101c091506101808281870152614259610200870185613de9565b8289015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc092506101a08388830301818901526142988287613de9565b838b015196508489820301868a01526142b18188613de9565b955050808a0151955050505080858303016101e0860152506142d38183613de9565b8481036020860152613fd18187613de9565b90815260200190565b60006040820184835260406020840152808451808352606085019150602086019250835b8181101561434657835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101614312565b50909695505050505050565b60405181810167ffffffffffffffff8111828210171561437157600080fd5b604052919050565b600067ffffffffffffffff82111561438f578081fd5b5060209081020190565b600067ffffffffffffffff8211156143af578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156143f65781810151838201526020016143de565b83811115614405576000848401525b50505050565b6004811061441557fe5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461441557600080fdfea365627a7a7231582067c5cc763deb33dec3babe92591793d68b6f9441aa149a37c465890b70b5bd1e6c6578706572696d656e74616cf564736f6c63430005110040" + "object": "0x608060405234801561001057600080fd5b50614784806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806368be3cf2116100b2578063a2c28d4b11610081578063c7f7142e11610066578063c7f7142e1461027b578063e68248f71461029b578063e9a8e442146102ae57610136565b8063a2c28d4b14610255578063abffc7611461026857610136565b806368be3cf2146101fc5780636dd6b78d1461021c5780639209483b1461022f5780639f76ad351461024257610136565b80634703a7e61161010957806358306ba0116100ee57806358306ba0146101c357806360ee052a146101d657806364ee6ade146101e957610136565b80634703a7e61461019d5780634cb8e253146101b057610136565b80630cc6600b1461013b5780632d753aa41461016457806339b085ad1461017757806340bc03ae1461018a575b600080fd5b61014e610149366004613839565b6102c1565b60405161015b919061435f565b60405180910390f35b61014e610172366004613740565b61033b565b61014e610185366004613b5b565b610531565b61014e610198366004613eaa565b6107ee565b61014e6101ab366004613839565b6109a6565b61014e6101be366004613839565b610b82565b61014e6101d13660046137c6565b610cb5565b61014e6101e4366004613839565b610d4c565b61014e6101f7366004613839565b611001565b61020f61020a366004613aef565b6111c7565b60405161015b91906142e1565b61014e61022a366004613839565b61130d565b61014e61023d366004613eaa565b6115b5565b61014e6102503660046137c6565b6117e9565b61014e6102633660046137c6565b6119ed565b61014e610276366004613999565b611a53565b61028e6102893660046136f6565b611c3e565b60405161015b91906140d5565b61014e6102a9366004613999565b611d78565b61014e6102bc366004613b5b565b611f4b565b60606102cd8385611fee565b6103316040518060600160405280856040516020016102ec91906140d5565b60405160208183030381529060405281526020018660405160200161031191906140d5565b6040516020818303038152906040528152602001612061815250836121d9565b90505b9392505050565b60606000825190508060405190808252806020026020018201604052801561036d578160200160208202803883390190505b50915073ffffffffffffffffffffffffffffffffffffffff87166103915750610528565b60005b8181101561052557600060608973ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff16636e79e133905060e01b8b8b8b8b89815181106103ec57fe5b602002602001015160405160240161040794939291906141a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161049091906140b9565b6000604051808303818686fa925050503d80600081146104cc576040519150601f19603f3d011682016040523d82523d6000602084013e6104d1565b606091505b509092509050600082156104fa57818060200190516104f39190810190613d6e565b9050610502565b505050610525565b8086858151811061050f57fe5b6020908102919091010152505050600101610394565b50505b95945050505050565b6060835160405190808252806020026020018201604052801561055e578160200160208202803883390190505b50905060005b845181146107e65783818151811061057857fe5b602002602001015151600014806105a6575084818151811061059657fe5b6020026020010151608001516000145b806105c857508481815181106105b857fe5b602002602001015160a001516000145b156105ec5760008282815181106105db57fe5b6020026020010181815250506107de565b600060608473ffffffffffffffffffffffffffffffffffffffff166207a1208673ffffffffffffffffffffffffffffffffffffffff1663e77286eb905060e01b89868151811061063857fe5b602002602001015189878151811061064c57fe5b6020026020010151604051602401610665929190614466565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516106ee91906140b9565b6000604051808303818686fa925050503d806000811461072a576040519150601f19603f3d011682016040523d82523d6000602084013e61072f565b606091505b50915091508161075a57600084848151811061074757fe5b60200260200101818152505050506107de565b610762613533565b600080838060200190516107799190810190613f46565b9194509250905060038351600681111561078f57fe5b14158061079a575080155b156107be5760008787815181106107ad57fe5b6020026020010181815250506107d8565b818787815181106107cb57fe5b6020026020010181815250505b50505050505b600101610564565b509392505050565b606060008251905080604051908082528060200260200182016040528015610820578160200160208202803883390190505b50915060005b8181101561099c5760006060886000015173ffffffffffffffffffffffffffffffffffffffff16620927c08a602001518a8a8a888151811061086457fe5b602002602001015160405160240161087e939291906143a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161090791906140b9565b6000604051808303818686fa925050503d8060008114610943576040519150601f19603f3d011682016040523d82523d6000602084013e610948565b606091505b50909250905060008215610971578180602001905161096a9190810190613d6e565b9050610979565b50505061099c565b8086858151811061098657fe5b6020908102919091010152505050600101610826565b5050949350505050565b60606109b28385611fee565b81516040805182815260208084028201019091528180156109dd578160200160208202803883390190505b50915060005b81811015610b7957600060606109f76123ae565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663ff1fd974905060e01b8a8a8a8881518110610a4157fe5b6020026020010151604051602401610a5b939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610ae491906140b9565b6000604051808303818686fa925050503d8060008114610b20576040519150601f19603f3d011682016040523d82523d6000602084013e610b25565b606091505b50909250905060008215610b4e5781806020019051610b479190810190613d6e565b9050610b56565b505050610b79565b80868581518110610b6357fe5b60209081029190910101525050506001016109e3565b50509392505050565b6060610b8e8385611fee565b8151604080518281526020808402820101909152818015610bb9578160200160208202803883390190505b5091506000610bc66123c6565b90506000805b83811015610caa578273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480610c3957508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15610c6357610c5c8888888481518110610c4f57fe5b60200260200101516123de565b9150610c8a565b610c748884888481518110610c4f57fe5b91508115610c8a57610c878388846123de565b91505b81858281518110610c9757fe5b6020908102919091010152600101610bcc565b505050509392505050565b60608273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d1c57508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610d2657610d44565b6060610d33868585611001565b9050610d40848683611001565b9150505b949350505050565b6060610d588385611fee565b8151604080518281526020808402820101909152818015610d83578160200160208202803883390190505b5091506000610d906123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610dd057610dcb86612bfe565b610dd3565b60005b90506000610ddf6123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610e1f57610e1a86612bfe565b610e22565b60005b905060005b83811015610caa576001610e396123c6565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610ed0578651610eaf9085907f2640f62c00000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b6020026020010151612c90565b878481518110610ebb57fe5b60200260200101819350828152505050610fed565b610ed86123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f41578651610eaf9084907f59e9486200000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b8651600090610f7a9085907f59e9486200000000000000000000000000000000000000000000000000000000908b9087908110610ea257fe5b925090508015610fd057610faf857f2640f62c0000000000000000000000000000000000000000000000000000000083612c90565b888581518110610fbb57fe5b60200260200101819450828152505050610feb565b6000878481518110610fde57fe5b6020026020010181815250505b505b80610ff85750610caa565b50600101610e27565b606061100d8385611fee565b8151604080518281526020808402820101909152818015611038578160200160208202803883390190505b50915060005b81811015610b7957600060606110526123ae565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663144a2752905060e01b898b8a888151811061109c57fe5b60200260200101516040516024016110b6939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161113f91906140b9565b6000604051808303818686fa925050503d806000811461117b576040519150601f19603f3d011682016040523d82523d6000602084013e611180565b606091505b50909250905060008215610b4e57818060200190516111a29190810190613d6e565b9050808685815181106111b157fe5b602090810291909101015250505060010161103e565b6040805182815260208084028201019091526060908280156111fd57816020015b60608152602001906001900390816111e85790505b50905060005b80831461130657600060603086868581811061121b57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261125557600080fd5b9091016020810191503567ffffffffffffffff81111561127457600080fd5b3681900382131561128457600080fd5b6040516112929291906140a9565b600060405180830381855afa9150503d80600081146112cd576040519150601f19603f3d011682016040523d82523d6000602084013e6112d2565b606091505b5091509150816112e457805160208201fd5b808484815181106112f157fe5b60209081029190910101525050600101611203565b5092915050565b60606113198385611fee565b8151604080518281526020808402820101909152818015611344578160200160208202803883390190505b50915060006113516123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146113915761138c86612bfe565b611394565b60005b905060006113a06123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146113e0576113db86612bfe565b6113e3565b60005b905060005b83811015610caa5760016113fa6123c6565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156114845786516114639085907f95b68fe700000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b87848151811061146f57fe5b602002602001018193508281525050506115a1565b61148c6123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156114f55786516114639084907fcd7724c300000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b865160009061152e9086907f95b68fe700000000000000000000000000000000000000000000000000000000908b9087908110610ea257fe5b92509050801561158457611563847fcd7724c30000000000000000000000000000000000000000000000000000000083612c90565b88858151811061156f57fe5b6020026020010181945082815250505061159f565b600087848151811061159257fe5b6020026020010181815250505b505b806115ac5750610caa565b506001016113e8565b60408401516060907fffffffff000000000000000000000000000000000000000000000000000000001661164f57604080516060810190915261164890806116018689608084016143bf565b604051602081830303815290604052815260200186886040516020016116289291906143bf565b6040516020818303038152906040528152602001612dd9815250836121d9565b9050610d44565b815160408051828152602080840282010190915281801561167a578160200160208202803883390190505b50915060005b8181101561099c5760006060886000015173ffffffffffffffffffffffffffffffffffffffff16620927c08a604001518a8a8a88815181106116be57fe5b60200260200101516040516024016116d8939291906143a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161176191906140b9565b6000604051808303818686fa925050503d806000811461179d576040519150601f19603f3d011682016040523d82523d6000602084013e6117a2565b606091505b5090925090506000821561097157818060200190516117c49190810190613d6e565b9050808685815181106117d357fe5b6020908102919091010152505050600101611680565b60606000825190508060405190808252806020026020018201604052801561181b578160200160208202803883390190505b509150600061182b878787611c3e565b905073ffffffffffffffffffffffffffffffffffffffff81166118505750610d449050565b60005b828110156119e257600060608373ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff1663343fbcdd905060e01b8b8b8b88815181106118aa57fe5b60200260200101516040516024016118c4939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161194d91906140b9565b6000604051808303818686fa925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b509092509050600082156119b757818060200190516119b09190810190613d6e565b90506119bf565b5050506119e2565b808785815181106119cc57fe5b6020908102919091010152505050600101611853565b505050949350505050565b6040805160608181019092526105289080611a0c86896080840161412f565b60405160208183030381529060405281526020018688604051602001611a3392919061412f565b6040516020818303038152906040528152602001612f70815250836121d9565b606060008251905080604051908082528060200260200182016040528015611a85578160200160208202803883390190505b50915060005b81811015611c365760006060611a9f612fea565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f905060e01b888681518110611ae757fe5b60200260200101518a604051602401611b019291906145b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611b8a91906140b9565b6000604051808303818686fa925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b50909250905060008215611c0b5781806020019051611bed9190810190613a5c565b600189510381518110611bfc57fe5b60200260200101519050611c13565b505050611c36565b80868581518110611c2057fe5b6020908102919091010152505050600101611a8b565b505092915050565b6040516000906060907f153f59970000000000000000000000000000000000000000000000000000000090611c79908690869060240161412f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608673ffffffffffffffffffffffffffffffffffffffff1683604051611d0191906140b9565b600060405180830381855afa9150503d8060008114611d3c576040519150601f19603f3d011682016040523d82523d6000602084013e611d41565b606091505b5091509150818015611d54575080516020145b15611d6e57611d6481600c613002565b9350505050610334565b5050509392505050565b606060008251905080604051908082528060200260200182016040528015611daa578160200160208202803883390190505b50915060005b81811015611c365760006060611dc4612fea565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff16631f00ca74905060e01b888681518110611e0c57fe5b60200260200101518a604051602401611e269291906145b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611eaf91906140b9565b6000604051808303818686fa925050503d8060008114611eeb576040519150601f19603f3d011682016040523d82523d6000602084013e611ef0565b606091505b50909250905060008215611c0b5781806020019051611f129190810190613a5c565b600081518110611f1e57fe5b6020026020010151905080868581518110611f3557fe5b6020908102919091010152505050600101611db0565b6060611f58848484610531565b905060005b84518110156107e657818181518110611f7257fe5b6020026020010151600014611fe657611fcd828281518110611f9057fe5b6020026020010151868381518110611fa457fe5b602002602001015160a00151878481518110611fbc57fe5b602002602001015160800151613047565b828281518110611fd957fe5b6020026020010181815250505b600101611f5d565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612054906143d7565b60405180910390fd5b5050565b60008060603073ffffffffffffffffffffffffffffffffffffffff16634cb8e25360e01b8780602001905161209991908101906136a1565b878060200190516120ad91908101906136a1565b6120b688613089565b6040516024016120c8939291906140f6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161215191906140b9565b600060405180830381855afa9150503d806000811461218c576040519150601f19603f3d011682016040523d82523d6000602084013e612191565b606091505b5091509150816121a657600092505050610334565b808060200190516121ba9190810190613a5c565b6000815181106121c657fe5b6020026020010151925050509392505050565b60608151604051908082528060200260200182016040528015612206578160200160208202803883390190505b509050815160001415612218576123a8565b6000612249846000015185602001518560008151811061223457fe5b6020026020010151876040015163ffffffff16565b90508061225657506123a8565b60006122738560200151866000015184886040015163ffffffff16565b90508061228257506123a89050565b60005b84518110156123a45760005b6005811015612366576122b88683815181106122a957fe5b60200260200101518486613047565b93506122c961271561271086613047565b935060006122e888602001518960000151878b6040015163ffffffff16565b9050806122f55750612366565b80935086838151811061230457fe5b6020026020010151841061235d57600087848151811061232057fe5b602002602001015161271089868151811061233757fe5b60200260200101518703028161234957fe5b0490506005811161235b575050612366565b505b50600101612291565b5061238585828151811061237657fe5b60200260200101518385613047565b84828151811061239157fe5b6020908102919091010152600101612285565b5050505b92915050565b73794e6e91555438afc3ccf1c5076a74f42133d08d90565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b60008060006123eb6130ca565b9150915060608173ffffffffffffffffffffffffffffffffffffffff16633d3dc52c6124156123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161461244d578861244f565b875b6040518263ffffffff1660e01b815260040161246b91906140d5565b60006040518083038186803b15801561248357600080fd5b505afa158015612497573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526124dd9190810190613a5c565b604080516000808252602082019092529192505b8251811015612796576040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b90612560907331e085afd48a1d6e51cc193153d625e8f0514c7f906004016140d5565b60206040518083038186803b15801561257857600080fd5b505afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125b09190810190613d6e565b8382815181106125bc57fe5b6020026020010151148061269757506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b90612631907310908c875d865c66f271f5d3949848971c9595c9906004016140d5565b60206040518083038186803b15801561264957600080fd5b505afa15801561265d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126819190810190613d6e565b83828151811061268d57fe5b6020026020010151145b8061276957506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061270390731e158c0e93c30d24e918ef83d1e0be23595c3c0f906004016140d5565b60206040518083038186803b15801561271b57600080fd5b505afa15801561272f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127539190810190613d6e565b83828151811061275f57fe5b6020026020010151145b1561278e5761278b8284838151811061277e57fe5b60200260200101516131fe565b91505b6001016124f1565b5060606127a16123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156128b8578473ffffffffffffffffffffffffffffffffffffffff166381efcbdd89600285600060405190808252806020026020018201604052801561281f578160200160208202803883390190505b506040518563ffffffff1660e01b815260040161283f949392919061425c565b60006040518083038186803b15801561285757600080fd5b505afa15801561286b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128b19190810190613d86565b9050612998565b8473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8a6002856000604051908082528060200260200182016040528015612903578160200160208202803883390190505b506040518563ffffffff1660e01b8152600401612923949392919061425c565b60006040518083038186803b15801561293b57600080fd5b505afa15801561294f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129959190810190613d86565b90505b600060606129a4613294565b73ffffffffffffffffffffffffffffffffffffffff166216e3607f418436bc000000000000000000000000000000000000000000000000000000006129e76123c6565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612a1f578d612a35565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b612a3d6123c6565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612a75578d612a8b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b8d600089604051602401612aa3959493929190614209565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612b2c91906140b9565b6000604051808303818686fa925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b50909250905060008215612b965781806020019051612b8f9190810190613d6e565b9050612ba7565b600098505050505050505050610334565b6000612bb28c6132ac565b60ff1690506000612bc28e6132ac565b60ff169050670de0b6b3a764000081600a0a83600a0a8e86020281612be357fe5b0481612beb57fe5b049e9d5050505050505050505050505050565b6000612c086132b7565b73ffffffffffffffffffffffffffffffffffffffff166306f2bf62836040518263ffffffff1660e01b8152600401612c4091906140d5565b60206040518083038186803b158015612c5857600080fd5b505afa158015612c6c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123a891908101906136a1565b60008073ffffffffffffffffffffffffffffffffffffffff8516612cb357612dd1565b60608573ffffffffffffffffffffffffffffffffffffffff16620249f08686604051602401612ce291906145af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612d6b91906140b9565b6000604051808303818686fa925050503d8060008114612da7576040519150601f19603f3d011682016040523d82523d6000602084013e612dac565b606091505b5090925090508115612dcf5780806020019051612dcc9190810190613d6e565b92505b505b935093915050565b600080612de4613555565b85806020019051612df89190810190613e0f565b91509150600085806020019051612e129190810190613df3565b905060006060307f40bc03ae00000000000000000000000000000000000000000000000000000000858786612e468c613089565b604051602401612e599493929190614434565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612ee291906140b9565b600060405180830381855afa9150503d8060008114612f1d576040519150601f19603f3d011682016040523d82523d6000602084013e612f22565b606091505b509150915081612f3a57600095505050505050610334565b80806020019051612f4e9190810190613a5c565b600081518110612f5a57fe5b6020026020010151955050505050509392505050565b600080600085806020019051612f8991908101906136bd565b91509150600085806020019051612fa391908101906136a1565b905060006060307f9f76ad3500000000000000000000000000000000000000000000000000000000858786612fd78c613089565b604051602401612e599493929190614156565b73f164fc0ec4e93095b804a4795bbe1e041497b92a90565b600081601401835110156130285761302861302360048551856014016132cf565b613374565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60006103318361307d61306182600163ffffffff61337c16565b613071888763ffffffff61339b16565b9063ffffffff6133cc16565b9063ffffffff6133e816565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181106130b957fe5b602002602001018181525050919050565b6000806130d5613294565b73ffffffffffffffffffffffffffffffffffffffff1663b78b842d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561311a57600080fd5b505afa15801561312e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061315291908101906136a1565b73ffffffffffffffffffffffffffffffffffffffff1663c3a2a93a6040518163ffffffff1660e01b815260040160006040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526131f19190810190613899565b5091955093505050509091565b6060825160010160405190808252806020026020018201604052801561322e578160200160208202803883390190505b50905060005b83518110156132705783818151811061324957fe5b602002602001015182828151811061325d57fe5b6020908102919091010152600101613234565b50818160018351038151811061328257fe5b60200260200101818152505092915050565b739aab3f75489902f3a48495025729a0af77d4b11e90565b60006123a882613412565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9590565b6060632800659560e01b8484846040516024016132ee93929190614393565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008282111561339557613395613023600285856134e3565b50900390565b6000826133aa575060006123a8565b828202828482816133b757fe5b041461033457610334613023600186866134e3565b60008282018381101561033457610334613023600086866134e3565b6000816133fe576133fe613023600385856134e3565b600082848161340957fe5b04949350505050565b600060129050600060608373ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600481526020017f313ce5670000000000000000000000000000000000000000000000000000000081525060405161347691906140b9565b600060405180830381855afa9150503d80600081146134b1576040519150601f19603f3d011682016040523d82523d6000602084013e6134b6565b606091505b50915091508180156134c9575080516020145b156134dc576134d9816000613502565b92505b5050919050565b606063e946c1bb60e01b8484846040516024016132ee93929190614372565b600061033483836000816020018351101561352a5761352a61302360058551856020016132cf565b50016020015190565b6040805160608101909152806000815260006020820181905260409091015290565b604080516060810182526000808252602082018190529181019190915290565b80356123a8816146e2565b600082601f830112613590578081fd5b81356135a361359e82614643565b61461c565b8181529150602080830190840160005b838110156135e0576135cb8760208435890101613653565b835260209283019291909101906001016135b3565b5050505092915050565b600082601f8301126135fa578081fd5b813561360861359e82614643565b81815291506020808301908481018184028601820187101561362957600080fd5b60005b848110156136485781358452928201929082019060010161362c565b505050505092915050565b600082601f830112613663578081fd5b813561367161359e82614663565b915080825283602082850101111561368857600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156136b2578081fd5b8151610334816146e2565b600080604083850312156136cf578081fd5b82516136da816146e2565b60208401519092506136eb816146e2565b809150509250929050565b60008060006060848603121561370a578081fd5b8335613715816146e2565b92506020840135613725816146e2565b91506040840135613735816146e2565b809150509250925092565b600080600080600060a08688031215613757578283fd5b8535613762816146e2565b94506020860135613772816146e2565b93506040860135613782816146e2565b92506060860135613792816146e2565b9150608086013567ffffffffffffffff8111156137ad578182fd5b6137b9888289016135ea565b9150509295509295909350565b600080600080608085870312156137db578182fd5b84356137e6816146e2565b935060208501356137f6816146e2565b92506040850135613806816146e2565b9150606085013567ffffffffffffffff811115613821578182fd5b61382d878288016135ea565b91505092959194509250565b60008060006060848603121561384d578081fd5b8335613858816146e2565b92506020840135613868816146e2565b9150604084013567ffffffffffffffff811115613883578182fd5b61388f868287016135ea565b9150509250925092565b60008060008060008060c087890312156138b1578384fd5b86516138bc816146e2565b809650506020808801516138cf816146e2565b60408901519096506138e0816146e2565b60608901519095506138f1816146e2565b6080890151909450613902816146e2565b60a089015190935067ffffffffffffffff81111561391e578283fd5b8089018a601f82011261392f578384fd5b8051915061393f61359e83614643565b82815283810190828501858502840186018e101561395b578687fd5b8693505b84841015613986578051613972816146e2565b83526001939093019291850191850161395f565b5080955050505050509295509295509295565b600080604083850312156139ab578182fd5b823567ffffffffffffffff808211156139c2578384fd5b81850186601f8201126139d3578485fd5b803592506139e361359e84614643565b80848252602080830192508084018a828389028701011115613a03578889fd5b8894505b86851015613a2e578035613a1a816146e2565b845260019490940193928101928101613a07565b509096508701359350505080821115613a45578283fd5b50613a52858286016135ea565b9150509250929050565b60006020808385031215613a6e578182fd5b825167ffffffffffffffff811115613a84578283fd5b80840185601f820112613a95578384fd5b80519150613aa561359e83614643565b8281528381019082850185850284018601891015613ac1578687fd5b8693505b84841015613ae3578051835260019390930192918501918501613ac5565b50979650505050505050565b60008060208385031215613b01578182fd5b823567ffffffffffffffff80821115613b18578384fd5b81850186601f820112613b29578485fd5b8035925081831115613b39578485fd5b8660208085028301011115613b4c578485fd5b60200196919550909350505050565b600080600060608486031215613b6f578081fd5b67ffffffffffffffff8085351115613b85578182fd5b8435850186601f820112613b97578283fd5b613ba461359e8235614643565b8135815260208082019190808401865b8535811015613d3157813586016101c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828f03011215613bf3578889fd5b613bfe6101c061461c565b613c0a8e868401613575565b8152613c198e60408401613575565b85820152613c2a8e60608401613575565b6040820152613c3c8e60808401613575565b606082015260a0820135608082015260c082013560a082015260e082013560c082015261010082013560e082015261012082013561010082015261014082013561012082015261016082013589811115613c94578a8bfd5b613ca28f8783860101613653565b6101408301525061018082013589811115613cbb578a8bfd5b613cc98f8783860101613653565b610160830152506101a082013589811115613ce2578a8bfd5b613cf08f8783860101613653565b610180830152506101c082013589811115613d09578a8bfd5b613d178f8783860101613653565b6101a0830152508652509382019390820190600101613bb4565b509197508801359250505081811115613d48578283fd5b613d5487828801613580565b93505050613d658560408601613575565b90509250925092565b600060208284031215613d7f578081fd5b5051919050565b600060208284031215613d97578081fd5b815167ffffffffffffffff811115613dad578182fd5b80830184601f820112613dbe578283fd5b80519150613dce61359e83614663565b828152856020848401011115613de2578384fd5b6105288360208301602085016146a5565b600060208284031215613e04578081fd5b815161033481614732565b60008060808385031215613e21578182fd5b8251613e2c81614732565b915060608385037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613e5f578081fd5b613e69606061461c565b6020840151613e77816146e2565b81526040840151613e8781614704565b60208201526060840151613e9a81614704565b6040820152919491935090915050565b60008060008084860360c0811215613ec0578283fd5b6060811215613ecd578283fd5b50613ed8606061461c565b8535613ee3816146e2565b81526020860135613ef381614704565b60208201526040860135613f0681614704565b604082015293506060850135613f1b81614732565b92506080850135613f2b81614732565b915060a085013567ffffffffffffffff811115613821578182fd5b600080600083850360a0811215613f5b578182fd5b6060811215613f68578182fd5b50613f73606061461c565b845160078110613f81578283fd5b815260208581015190820152604080860151908201526060850151608086015191945092508015158114613735578182fd5b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b82811015613ffe578151865260209586019590910190600101613fe0565b5093949350505050565b600081518084526140208160208601602086016146a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805173ffffffffffffffffffffffffffffffffffffffff1682526020808201517fffffffff000000000000000000000000000000000000000000000000000000009081169184019190915260409182015116910152565b6000828483379101908152919050565b600082516140cb8184602087016146a5565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526105286060830184613fcd565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152808516604084015250608060608301526141976080830184613fcd565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260ff8416606083015260a0608083015261425160a0830184614008565b979650505050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff87168352614284866146d5565b60208381018790526080604085015285519182905285019060a0840190835b818110156142c15783518352602093840193909201916001016142a3565b505083810360608501526142d58186613fcd565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614352577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614340858351614008565b94509285019290850190600101614306565b5092979650505050505050565b6000602082526103346020830184613fcd565b6060810161437f856146d5565b938152602081019290925260409091015290565b606081016008851061437f57fe5b600f93840b81529190920b6020820152604081019190915260600190565b600f83900b8152608081016103346020830184614052565b60208082526025908201527f455243323042726964676553616d706c65722f494e56414c49445f544f4b454e60408201527f5f50414952000000000000000000000000000000000000000000000000000000606082015260800190565b60006144408287614052565b84600f0b606083015283600f0b608083015260c060a083015261419760c0830184613fcd565b60006040825261447a604083018551613fb3565b602084015161448c6060840182613fb3565b50604084015161449f6080840182613fb3565b5060608401516144b260a0840182613fb3565b50608084015160c083015260a084015160e083015260c0840151610100818185015260e086015191506101208281860152818701519250610140915082828601528087015192505061016082818601528187015192506101c091506101808281870152614523610200870185614008565b8289015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc092506101a08388830301818901526145628287614008565b838b015196508489820301868a015261457b8188614008565b955050808a0151955050505080858303016101e08601525061459d8183614008565b84810360208601526142518187614008565b90815260200190565b60006040820184835260406020840152808451808352606085019150602086019250835b8181101561461057835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016145dc565b50909695505050505050565b60405181810167ffffffffffffffff8111828210171561463b57600080fd5b604052919050565b600067ffffffffffffffff821115614659578081fd5b5060209081020190565b600067ffffffffffffffff821115614679578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156146c05781810151838201526020016146a8565b838111156146cf576000848401525b50505050565b600481106146df57fe5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146146df57600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146146df57600080fd5b80600f0b81146146df57600080fdfea365627a7a72315820b6fbcf4008958c944ebfec299da165bd697cf68b9711b57b06ab81852a3933ff6c6578706572696d656e74616cf564736f6c63430005110040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c806368be3cf2116100b2578063abffc76111610081578063d0eea06d11610066578063d0eea06d14610288578063e68248f71461029b578063e9a8e442146102ae57610136565b8063abffc76114610255578063c7f7142e1461026857610136565b806368be3cf2146101fc5780636dd6b78d1461021c57806398cdafba1461022f5780639f76ad351461024257610136565b80634703a7e61161010957806358306ba0116100ee57806358306ba0146101c357806360ee052a146101d657806364ee6ade146101e957610136565b80634703a7e61461019d5780634cb8e253146101b057610136565b80631796fb871461013b5780632d753aa414610164578063354152a31461017757806339b085ad1461018a575b600080fd5b61014e6101493660046139e0565b6102c1565b60405161015b91906140df565b60405180910390f35b61014e610172366004613691565b610492565b61014e6101853660046139e0565b610688565b61014e610198366004613be0565b610842565b61014e6101ab36600461380f565b610aff565b61014e6101be36600461380f565b610cdb565b61014e6101d1366004613717565b610e0e565b61014e6101e436600461380f565b610ea5565b61014e6101f736600461380f565b61115a565b61020f61020a366004613b74565b611320565b60405161015b9190614061565b61014e61022a36600461380f565b611466565b61014e61023d36600461378a565b61170e565b61014e610250366004613717565b611748565b61014e610263366004613a1e565b61194c565b61027b610276366004613647565b611b37565b60405161015b9190613e5f565b61014e61029636600461386f565b611c72565b61014e6102a9366004613a1e565b611ca3565b61014e6102bc366004613be0565b611e76565b6060600082519050806040519080825280602002602001820160405280156102f3578160200160208202803883390190505b50915060005b8181101561048857600060608873ffffffffffffffffffffffffffffffffffffffff16620927c0600073ffffffffffffffffffffffffffffffffffffffff16630e71d1b9905060e01b8a8a8a888151811061035057fe5b602002602001015160405160240161036a93929190614121565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516103f39190613e43565b6000604051808303818686fa925050503d806000811461042f576040519150601f19603f3d011682016040523d82523d6000602084013e610434565b606091505b5090925090506000821561045d57818060200190516104569190810190613ca2565b9050610465565b505050610488565b8086858151811061047257fe5b60209081029190910101525050506001016102f9565b5050949350505050565b6060600082519050806040519080825280602002602001820160405280156104c4578160200160208202803883390190505b50915073ffffffffffffffffffffffffffffffffffffffff87166104e8575061067f565b60005b8181101561067c57600060608973ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff16636e79e133905060e01b8b8b8b8b898151811061054357fe5b602002602001015160405160240161055e9493929190613ee8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516105e79190613e43565b6000604051808303818686fa925050503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b50909250905060008215610651578180602001905161064a9190810190613ca2565b9050610659565b50505061067c565b8086858151811061066657fe5b60209081029190910101525050506001016104eb565b50505b95945050505050565b6060600082519050806040519080825280602002602001820160405280156106ba578160200160208202803883390190505b50915060005b8181101561048857600060608873ffffffffffffffffffffffffffffffffffffffff16620927c0600073ffffffffffffffffffffffffffffffffffffffff166307211ef7905060e01b8a8a8a888151811061071757fe5b602002602001015160405160240161073193929190614121565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516107ba9190613e43565b6000604051808303818686fa925050503d80600081146107f6576040519150601f19603f3d011682016040523d82523d6000602084013e6107fb565b606091505b5090925090506000821561045d578180602001905161081d9190810190613ca2565b90508086858151811061082c57fe5b60209081029190910101525050506001016106c0565b6060835160405190808252806020026020018201604052801561086f578160200160208202803883390190505b50905060005b84518114610af75783818151811061088957fe5b602002602001015151600014806108b757508481815181106108a757fe5b6020026020010151608001516000145b806108d957508481815181106108c957fe5b602002602001015160a001516000145b156108fd5760008282815181106108ec57fe5b602002602001018181525050610aef565b600060608473ffffffffffffffffffffffffffffffffffffffff166207a1208673ffffffffffffffffffffffffffffffffffffffff1663e77286eb905060e01b89868151811061094957fe5b602002602001015189878151811061095d57fe5b602002602001015160405160240161097692919061419c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516109ff9190613e43565b6000604051808303818686fa925050503d8060008114610a3b576040519150601f19603f3d011682016040523d82523d6000602084013e610a40565b606091505b509150915081610a6b576000848481518110610a5857fe5b6020026020010181815250505050610aef565b610a73613340565b60008083806020019051610a8a9190810190613d27565b91945092509050600383516006811115610aa057fe5b141580610aab575080155b15610acf576000878781518110610abe57fe5b602002602001018181525050610ae9565b81878781518110610adc57fe5b6020026020010181815250505b50505050505b600101610875565b509392505050565b6060610b0b8385611f19565b8151604080518281526020808402820101909152818015610b36578160200160208202803883390190505b50915060005b81811015610cd25760006060610b50611f8c565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663ff1fd974905060e01b8a8a8a8881518110610b9a57fe5b6020026020010151604051602401610bb493929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610c3d9190613e43565b6000604051808303818686fa925050503d8060008114610c79576040519150601f19603f3d011682016040523d82523d6000602084013e610c7e565b606091505b50909250905060008215610ca75781806020019051610ca09190810190613ca2565b9050610caf565b505050610cd2565b80868581518110610cbc57fe5b6020908102919091010152505050600101610b3c565b50509392505050565b6060610ce78385611f19565b8151604080518281526020808402820101909152818015610d12578160200160208202803883390190505b5091506000610d1f611fa4565b90506000805b83811015610e03578273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480610d9257508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15610dbc57610db58888888481518110610da857fe5b6020026020010151611fbc565b9150610de3565b610dcd8884888481518110610da857fe5b91508115610de357610de0838884611fbc565b91505b81858281518110610df057fe5b6020908102919091010152600101610d25565b505050509392505050565b60608273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610e7557508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610e7f57610e9d565b6060610e8c86858561115a565b9050610e9984868361115a565b9150505b949350505050565b6060610eb18385611f19565b8151604080518281526020808402820101909152818015610edc578160200160208202803883390190505b5091506000610ee9611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610f2957610f24866127dc565b610f2c565b60005b90506000610f38611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610f7857610f73866127dc565b610f7b565b60005b905060005b83811015610e03576001610f92611fa4565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156110295786516110089085907f2640f62c00000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b6020026020010151612874565b87848151811061101457fe5b60200260200101819350828152505050611146565b611031611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561109a5786516110089084907f59e9486200000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b86516000906110d39085907f59e9486200000000000000000000000000000000000000000000000000000000908b9087908110610ffb57fe5b92509050801561112957611108857f2640f62c0000000000000000000000000000000000000000000000000000000083612874565b88858151811061111457fe5b60200260200101819450828152505050611144565b600087848151811061113757fe5b6020026020010181815250505b505b806111515750610e03565b50600101610f80565b60606111668385611f19565b8151604080518281526020808402820101909152818015611191578160200160208202803883390190505b50915060005b81811015610cd257600060606111ab611f8c565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663144a2752905060e01b898b8a88815181106111f557fe5b602002602001015160405160240161120f93929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516112989190613e43565b6000604051808303818686fa925050503d80600081146112d4576040519150601f19603f3d011682016040523d82523d6000602084013e6112d9565b606091505b50909250905060008215610ca757818060200190516112fb9190810190613ca2565b90508086858151811061130a57fe5b6020908102919091010152505050600101611197565b60408051828152602080840282010190915260609082801561135657816020015b60608152602001906001900390816113415790505b50905060005b80831461145f57600060603086868581811061137457fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368490030181126113ae57600080fd5b9091016020810191503567ffffffffffffffff8111156113cd57600080fd5b368190038213156113dd57600080fd5b6040516113eb929190613e33565b600060405180830381855afa9150503d8060008114611426576040519150601f19603f3d011682016040523d82523d6000602084013e61142b565b606091505b50915091508161143d57805160208201fd5b8084848151811061144a57fe5b6020908102919091010152505060010161135c565b5092915050565b60606114728385611f19565b815160408051828152602080840282010190915281801561149d578160200160208202803883390190505b50915060006114aa611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146114ea576114e5866127dc565b6114ed565b60005b905060006114f9611fa4565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461153957611534866127dc565b61153c565b60005b905060005b83811015610e03576001611553611fa4565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156115dd5786516115bc9085907f95b68fe700000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b8784815181106115c857fe5b602002602001018193508281525050506116fa565b6115e5611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561164e5786516115bc9084907fcd7724c300000000000000000000000000000000000000000000000000000000908a9086908110610ffb57fe5b86516000906116879086907f95b68fe700000000000000000000000000000000000000000000000000000000908b9087908110610ffb57fe5b9250905080156116dd576116bc847fcd7724c30000000000000000000000000000000000000000000000000000000083612874565b8885815181106116c857fe5b602002602001018194508281525050506116f8565b60008784815181106116eb57fe5b6020026020010181815250505b505b806117055750610e03565b50600101611541565b606061173e858585857f9f76ad35000000000000000000000000000000000000000000000000000000008b6129bd565b9695505050505050565b60606000825190508060405190808252806020026020018201604052801561177a578160200160208202803883390190505b509150600061178a878787611b37565b905073ffffffffffffffffffffffffffffffffffffffff81166117af5750610e9d9050565b60005b8281101561194157600060608373ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff1663343fbcdd905060e01b8b8b8b888151811061180957fe5b602002602001015160405160240161182393929190613f58565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516118ac9190613e43565b6000604051808303818686fa925050503d80600081146118e8576040519150601f19603f3d011682016040523d82523d6000602084013e6118ed565b606091505b50909250905060008215611916578180602001905161190f9190810190613ca2565b905061191e565b505050611941565b8087858151811061192b57fe5b60209081029190910101525050506001016117b2565b505050949350505050565b60606000825190508060405190808252806020026020018201604052801561197e578160200160208202803883390190505b50915060005b81811015611b2f5760006060611998612b83565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f905060e01b8886815181106119e057fe5b60200260200101518a6040516024016119fa9291906142ee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611a839190613e43565b6000604051808303818686fa925050503d8060008114611abf576040519150601f19603f3d011682016040523d82523d6000602084013e611ac4565b606091505b50909250905060008215611b045781806020019051611ae69190810190613ae1565b600189510381518110611af557fe5b60200260200101519050611b0c565b505050611b2f565b80868581518110611b1957fe5b6020908102919091010152505050600101611984565b505092915050565b6040516000906060907f153f59970000000000000000000000000000000000000000000000000000000090611b729086908690602401613e80565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608673ffffffffffffffffffffffffffffffffffffffff1683604051611bfa9190613e43565b600060405180830381855afa9150503d8060008114611c35576040519150601f19603f3d011682016040523d82523d6000602084013e611c3a565b606091505b5091509150818015611c4d575080516020145b15611c6757611c5d81600c612b9b565b9350505050611c6b565b5050505b9392505050565b606061067f858585857f4cb8e2530000000000000000000000000000000000000000000000000000000060006129bd565b606060008251905080604051908082528060200260200182016040528015611cd5578160200160208202803883390190505b50915060005b81811015611b2f5760006060611cef612b83565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff16631f00ca74905060e01b888681518110611d3757fe5b60200260200101518a604051602401611d519291906142ee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611dda9190613e43565b6000604051808303818686fa925050503d8060008114611e16576040519150601f19603f3d011682016040523d82523d6000602084013e611e1b565b606091505b50909250905060008215611b045781806020019051611e3d9190810190613ae1565b600081518110611e4957fe5b6020026020010151905080868581518110611e6057fe5b6020908102919091010152505050600101611cdb565b6060611e83848484610842565b905060005b8451811015610af757818181518110611e9d57fe5b6020026020010151600014611f1157611ef8828281518110611ebb57fe5b6020026020010151868381518110611ecf57fe5b602002602001015160a00151878481518110611ee757fe5b602002602001015160800151612be0565b828281518110611f0457fe5b6020026020010181815250505b600101611e88565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061413f565b60405180910390fd5b5050565b73794e6e91555438afc3ccf1c5076a74f42133d08d90565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b6000806000611fc9612c22565b9150915060608173ffffffffffffffffffffffffffffffffffffffff16633d3dc52c611ff3611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161461202b578861202d565b875b6040518263ffffffff1660e01b81526004016120499190613e5f565b60006040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526120bb9190810190613ae1565b604080516000808252602082019092529192505b8251811015612374576040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061213e907331e085afd48a1d6e51cc193153d625e8f0514c7f90600401613e5f565b60206040518083038186803b15801561215657600080fd5b505afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061218e9190810190613ca2565b83828151811061219a57fe5b6020026020010151148061227557506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061220f907310908c875d865c66f271f5d3949848971c9595c990600401613e5f565b60206040518083038186803b15801561222757600080fd5b505afa15801561223b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061225f9190810190613ca2565b83828151811061226b57fe5b6020026020010151145b8061234757506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b906122e190731e158c0e93c30d24e918ef83d1e0be23595c3c0f90600401613e5f565b60206040518083038186803b1580156122f957600080fd5b505afa15801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123319190810190613ca2565b83828151811061233d57fe5b6020026020010151145b1561236c576123698284838151811061235c57fe5b6020026020010151612d56565b91505b6001016120cf565b50606061237f611fa4565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415612496578473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8960028560006040519080825280602002602001820160405280156123fd578160200160208202803883390190505b506040518563ffffffff1660e01b815260040161241d9493929190613fdc565b60006040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261248f9190810190613cba565b9050612576565b8473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8a60028560006040519080825280602002602001820160405280156124e1578160200160208202803883390190505b506040518563ffffffff1660e01b81526004016125019493929190613fdc565b60006040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125739190810190613cba565b90505b60006060612582612dec565b73ffffffffffffffffffffffffffffffffffffffff166216e3607f418436bc000000000000000000000000000000000000000000000000000000006125c5611fa4565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff16146125fd578d612613565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b61261b611fa4565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612653578d612669565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b8d600089604051602401612681959493929190613f89565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161270a9190613e43565b6000604051808303818686fa925050503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b50909250905060008215612774578180602001905161276d9190810190613ca2565b9050612785565b600098505050505050505050611c6b565b60006127908c612e04565b60ff16905060006127a08e612e04565b60ff169050670de0b6b3a764000081600a0a83600a0a8e860202816127c157fe5b04816127c957fe5b049e9d5050505050505050505050505050565b60006127e6612e0f565b73ffffffffffffffffffffffffffffffffffffffff166306f2bf62836040518263ffffffff1660e01b815260040161281e9190613e5f565b60206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061286e919081019061362b565b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff8516612897576129b5565b60608573ffffffffffffffffffffffffffffffffffffffff16620249f086866040516024016128c691906142e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161294f9190613e43565b6000604051808303818686fa925050503d806000811461298b576040519150601f19603f3d011682016040523d82523d6000602084013e612990565b606091505b50909250905081156129b357808060200190516129b09190810190613ca2565b92505b505b935093915050565b60606129c98688611f19565b84516129d45761173e565b60008060008751604051908082528060200260200182016040528015612a04578160200160208202803883390190505b509350612a28898b8a600081518110612a1957fe5b60200260200101518989612e27565b925082612a38575061173e915050565b612a458a8a858989612e27565b915081612a55575061173e915050565b60005b8851811015612b755760005b8860200151811015612b3757612a8e8a8381518110612a7f57fe5b60200260200101518587612be0565b9450612aa589600001516127100161271087612be0565b94506000612ab68d8d888c8c612e27565b905080612ac35750612b37565b8094508a8381518110612ad257fe5b60200260200101518510612b2e5760008b8481518110612aee57fe5b60200260200101518c8581518110612b0257fe5b602002602001015187036127100281612b1757fe5b0490508a600001518111612b2c575050612b37565b505b50600101612a64565b50612b56898281518110612b4757fe5b60200260200101518486612be0565b858281518110612b6257fe5b6020908102919091010152600101612a58565b505050509695505050505050565b73f164fc0ec4e93095b804a4795bbe1e041497b92a90565b60008160140183511015612bc157612bc1612bbc60048551856014016130dc565b613181565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6000610e9d83612c16612bfa82600163ffffffff61318916565b612c0a888763ffffffff6131a816565b9063ffffffff6131d916565b9063ffffffff6131f516565b600080612c2d612dec565b73ffffffffffffffffffffffffffffffffffffffff1663b78b842d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c7257600080fd5b505afa158015612c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612caa919081019061362b565b73ffffffffffffffffffffffffffffffffffffffff1663c3a2a93a6040518163ffffffff1660e01b815260040160006040518083038186803b158015612cef57600080fd5b505afa158015612d03573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612d4991908101906138e1565b5091955093505050509091565b60608251600101604051908082528060200260200182016040528015612d86578160200160208202803883390190505b50905060005b8351811015612dc857838181518110612da157fe5b6020026020010151828281518110612db557fe5b6020908102919091010152600101612d8c565b508181600183510381518110612dda57fe5b60200260200101818152505092915050565b739aab3f75489902f3a48495025729a0af77d4b11e90565b600061286e8261321f565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9590565b6040805160018082528183019092526000916060918291602080830190803883390190505090508581600081518110612e5c57fe5b60209081029190910101527fffffffff0000000000000000000000000000000000000000000000000000000085167f4cb8e253000000000000000000000000000000000000000000000000000000001415612f6c576040517f4cb8e2530000000000000000000000000000000000000000000000000000000090612ee8908a908a908590602401613f1f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150613025565b6040517f9f76ad350000000000000000000000000000000000000000000000000000000090612fa59086908b908b908690602401613ea7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915291505b600060603073ffffffffffffffffffffffffffffffffffffffff168460405161304e9190613e43565b600060405180830381855afa9150503d8060008114613089576040519150601f19603f3d011682016040523d82523d6000602084013e61308e565b606091505b5091509150816130a557600094505050505061067f565b808060200190516130b99190810190613ae1565b6000815181106130c557fe5b602002602001015194505050505095945050505050565b6060632800659560e01b8484846040516024016130fb93929190614113565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b6000828211156131a2576131a2612bbc600285856132f0565b50900390565b6000826131b75750600061286e565b828202828482816131c457fe5b0414611c6b57611c6b612bbc600186866132f0565b600082820183811015611c6b57611c6b612bbc600086866132f0565b60008161320b5761320b612bbc600385856132f0565b600082848161321657fe5b04949350505050565b600060129050600060608373ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600481526020017f313ce567000000000000000000000000000000000000000000000000000000008152506040516132839190613e43565b600060405180830381855afa9150503d80600081146132be576040519150601f19603f3d011682016040523d82523d6000602084013e6132c3565b606091505b50915091508180156132d6575080516020145b156132e9576132e681600061330f565b92505b5050919050565b606063e946c1bb60e01b8484846040516024016130fb939291906140f2565b6000611c6b83836000816020018351101561333757613337612bbc60058551856020016130dc565b50016020015190565b6040805160608101909152806000815260006020820181905260409091015290565b803561286e81614418565b805161286e81614418565b600082601f830112613388578081fd5b813561339b61339682614379565b614352565b8181529150602080830190840160005b838110156133d8576133c3876020843589010161344b565b835260209283019291909101906001016133ab565b5050505092915050565b600082601f8301126133f2578081fd5b813561340061339682614379565b81815291506020808301908481018184028601820187101561342157600080fd5b60005b8481101561344057813584529282019290820190600101613424565b505050505092915050565b600082601f83011261345b578081fd5b813561346961339682614399565b915080825283602082850101111561348057600080fd5b8060208401602084013760009082016020015292915050565b8035600f81900b811461286e57600080fd5b6000604082840312156134bc578081fd5b6134c66040614352565b9050813581526020820135602082015292915050565b60006101c08083850312156134ef578182fd5b6134f881614352565b9150506135058383613362565b81526135148360208401613362565b60208201526135268360408401613362565b60408201526135388360608401613362565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561359a57600080fd5b6135a68683870161344b565b838501526101609250828501359150808211156135c257600080fd5b6135ce8683870161344b565b838501526101809250828501359150808211156135ea57600080fd5b6135f68683870161344b565b838501526101a092508285013591508082111561361257600080fd5b5061361f8582860161344b565b82840152505092915050565b60006020828403121561363c578081fd5b8151611c6b81614418565b60008060006060848603121561365b578182fd5b833561366681614418565b9250602084013561367681614418565b9150604084013561368681614418565b809150509250925092565b600080600080600060a086880312156136a8578283fd5b85356136b381614418565b945060208601356136c381614418565b935060408601356136d381614418565b925060608601356136e381614418565b9150608086013567ffffffffffffffff8111156136fe578182fd5b61370a888289016133e2565b9150509295509295909350565b6000806000806080858703121561372c578182fd5b843561373781614418565b9350602085013561374781614418565b9250604085013561375781614418565b9150606085013567ffffffffffffffff811115613772578182fd5b61377e878288016133e2565b91505092959194509250565b600080600080600060c086880312156137a1578283fd5b85356137ac81614418565b945060208601356137bc81614418565b935060408601356137cc81614418565b9250606086013567ffffffffffffffff8111156137e7578182fd5b6137f3888289016133e2565b92505061380387608088016134ab565b90509295509295909350565b600080600060608486031215613823578081fd5b833561382e81614418565b9250602084013561383e81614418565b9150604084013567ffffffffffffffff811115613859578182fd5b613865868287016133e2565b9150509250925092565b60008060008060a08587031215613884578182fd5b843561388f81614418565b9350602085013561389f81614418565b9250604085013567ffffffffffffffff8111156138ba578283fd5b6138c6878288016133e2565b9250506138d686606087016134ab565b905092959194509250565b60008060008060008060c087890312156138f9578384fd5b865161390481614418565b8096505060208088015161391781614418565b604089015190965061392881614418565b606089015190955061393981614418565b608089015190945061394a81614418565b60a089015190935067ffffffffffffffff811115613966578283fd5b8089018a601f820112613977578384fd5b8051915061398761339683614379565b82815283810190828501858502840186018e10156139a3578687fd5b8693505b848410156139cd576139b98e8261336d565b8352600193909301929185019185016139a7565b5080955050505050509295509295509295565b600080600080608085870312156139f5578182fd5b8435613a0081614418565b9350613a0f8660208701613499565b92506137578660408701613499565b60008060408385031215613a30578182fd5b823567ffffffffffffffff80821115613a47578384fd5b81850186601f820112613a58578485fd5b80359250613a6861339684614379565b80848252602080830192508084018a828389028701011115613a88578889fd5b8894505b86851015613ab3578035613a9f81614418565b845260019490940193928101928101613a8c565b509096508701359350505080821115613aca578283fd5b50613ad7858286016133e2565b9150509250929050565b60006020808385031215613af3578182fd5b825167ffffffffffffffff811115613b09578283fd5b80840185601f820112613b1a578384fd5b80519150613b2a61339683614379565b8281528381019082850185850284018601891015613b46578687fd5b8693505b84841015613b68578051835260019390930192918501918501613b4a565b50979650505050505050565b60008060208385031215613b86578182fd5b823567ffffffffffffffff80821115613b9d578384fd5b81850186601f820112613bae578485fd5b8035925081831115613bbe578485fd5b8660208085028301011115613bd1578485fd5b60200196919550909350505050565b600080600060608486031215613bf4578081fd5b833567ffffffffffffffff80821115613c0b578283fd5b81860187601f820112613c1c578384fd5b80359250613c2c61339684614379565b83815260208082019190838101875b87811015613c6457613c528d8484358901016134dc565b85529382019390820190600101613c3b565b50919850890135945050505080821115613c7c578283fd5b50613c8986828701613378565b925050613c998560408601613362565b90509250925092565b600060208284031215613cb3578081fd5b5051919050565b600060208284031215613ccb578081fd5b815167ffffffffffffffff811115613ce1578182fd5b80830184601f820112613cf2578283fd5b80519150613d0261339683614399565b828152856020848401011115613d16578384fd5b61067f8360208301602085016143db565b600080600083850360a0811215613d3c578182fd5b6060811215613d49578182fd5b50613d546060614352565b845160078110613d62578283fd5b815260208581015190820152604080860151908201526060850151608086015191945092508015158114613686578182fd5b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b82811015613ddf578151865260209586019590910190600101613dc1565b5093949350505050565b60008151808452613e018160208601602086016143db565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b60008251613e558184602087016143db565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401528085166040840152506080606083015261173e6080830184613dae565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152606081019190915260800190565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015261067f6060830184613dae565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260ff8416606083015260a06080830152613fd160a0830184613de9565b979650505050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526140048661440b565b60208381018790526080604085015285519182905285019060a0840190835b81811015614041578351835260209384019390920191600101614023565b505083810360608501526140558186613dae565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156140d2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526140c0858351613de9565b94509285019290850190600101614086565b5092979650505050505050565b600060208252611c6b6020830184613dae565b606081016140ff8561440b565b938152602081019290925260409091015290565b60608101600885106140ff57fe5b600f93840b81529190920b6020820152604081019190915260600190565b60208082526025908201527f455243323042726964676553616d706c65722f494e56414c49445f544f4b454e60408201527f5f50414952000000000000000000000000000000000000000000000000000000606082015260800190565b6000604082526141b0604083018551613d94565b60208401516141c26060840182613d94565b5060408401516141d56080840182613d94565b5060608401516141e860a0840182613d94565b50608084015160c083015260a084015160e083015260c0840151610100818185015260e086015191506101208281860152818701519250610140915082828601528087015192505061016082818601528187015192506101c091506101808281870152614259610200870185613de9565b8289015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc092506101a08388830301818901526142988287613de9565b838b015196508489820301868a01526142b18188613de9565b955050808a0151955050505080858303016101e0860152506142d38183613de9565b8481036020860152613fd18187613de9565b90815260200190565b60006040820184835260406020840152808451808352606085019150602086019250835b8181101561434657835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101614312565b50909695505050505050565b60405181810167ffffffffffffffff8111828210171561437157600080fd5b604052919050565b600067ffffffffffffffff82111561438f578081fd5b5060209081020190565b600067ffffffffffffffff8211156143af578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156143f65781810151838201526020016143de565b83811115614405576000848401525b50505050565b6004811061441557fe5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461441557600080fdfea365627a7a7231582067c5cc763deb33dec3babe92591793d68b6f9441aa149a37c465890b70b5bd1e6c6578706572696d656e74616cf564736f6c63430005110040" + "object": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c806368be3cf2116100b2578063a2c28d4b11610081578063c7f7142e11610066578063c7f7142e1461027b578063e68248f71461029b578063e9a8e442146102ae57610136565b8063a2c28d4b14610255578063abffc7611461026857610136565b806368be3cf2146101fc5780636dd6b78d1461021c5780639209483b1461022f5780639f76ad351461024257610136565b80634703a7e61161010957806358306ba0116100ee57806358306ba0146101c357806360ee052a146101d657806364ee6ade146101e957610136565b80634703a7e61461019d5780634cb8e253146101b057610136565b80630cc6600b1461013b5780632d753aa41461016457806339b085ad1461017757806340bc03ae1461018a575b600080fd5b61014e610149366004613839565b6102c1565b60405161015b919061435f565b60405180910390f35b61014e610172366004613740565b61033b565b61014e610185366004613b5b565b610531565b61014e610198366004613eaa565b6107ee565b61014e6101ab366004613839565b6109a6565b61014e6101be366004613839565b610b82565b61014e6101d13660046137c6565b610cb5565b61014e6101e4366004613839565b610d4c565b61014e6101f7366004613839565b611001565b61020f61020a366004613aef565b6111c7565b60405161015b91906142e1565b61014e61022a366004613839565b61130d565b61014e61023d366004613eaa565b6115b5565b61014e6102503660046137c6565b6117e9565b61014e6102633660046137c6565b6119ed565b61014e610276366004613999565b611a53565b61028e6102893660046136f6565b611c3e565b60405161015b91906140d5565b61014e6102a9366004613999565b611d78565b61014e6102bc366004613b5b565b611f4b565b60606102cd8385611fee565b6103316040518060600160405280856040516020016102ec91906140d5565b60405160208183030381529060405281526020018660405160200161031191906140d5565b6040516020818303038152906040528152602001612061815250836121d9565b90505b9392505050565b60606000825190508060405190808252806020026020018201604052801561036d578160200160208202803883390190505b50915073ffffffffffffffffffffffffffffffffffffffff87166103915750610528565b60005b8181101561052557600060608973ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff16636e79e133905060e01b8b8b8b8b89815181106103ec57fe5b602002602001015160405160240161040794939291906141a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161049091906140b9565b6000604051808303818686fa925050503d80600081146104cc576040519150601f19603f3d011682016040523d82523d6000602084013e6104d1565b606091505b509092509050600082156104fa57818060200190516104f39190810190613d6e565b9050610502565b505050610525565b8086858151811061050f57fe5b6020908102919091010152505050600101610394565b50505b95945050505050565b6060835160405190808252806020026020018201604052801561055e578160200160208202803883390190505b50905060005b845181146107e65783818151811061057857fe5b602002602001015151600014806105a6575084818151811061059657fe5b6020026020010151608001516000145b806105c857508481815181106105b857fe5b602002602001015160a001516000145b156105ec5760008282815181106105db57fe5b6020026020010181815250506107de565b600060608473ffffffffffffffffffffffffffffffffffffffff166207a1208673ffffffffffffffffffffffffffffffffffffffff1663e77286eb905060e01b89868151811061063857fe5b602002602001015189878151811061064c57fe5b6020026020010151604051602401610665929190614466565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516106ee91906140b9565b6000604051808303818686fa925050503d806000811461072a576040519150601f19603f3d011682016040523d82523d6000602084013e61072f565b606091505b50915091508161075a57600084848151811061074757fe5b60200260200101818152505050506107de565b610762613533565b600080838060200190516107799190810190613f46565b9194509250905060038351600681111561078f57fe5b14158061079a575080155b156107be5760008787815181106107ad57fe5b6020026020010181815250506107d8565b818787815181106107cb57fe5b6020026020010181815250505b50505050505b600101610564565b509392505050565b606060008251905080604051908082528060200260200182016040528015610820578160200160208202803883390190505b50915060005b8181101561099c5760006060886000015173ffffffffffffffffffffffffffffffffffffffff16620927c08a602001518a8a8a888151811061086457fe5b602002602001015160405160240161087e939291906143a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161090791906140b9565b6000604051808303818686fa925050503d8060008114610943576040519150601f19603f3d011682016040523d82523d6000602084013e610948565b606091505b50909250905060008215610971578180602001905161096a9190810190613d6e565b9050610979565b50505061099c565b8086858151811061098657fe5b6020908102919091010152505050600101610826565b5050949350505050565b60606109b28385611fee565b81516040805182815260208084028201019091528180156109dd578160200160208202803883390190505b50915060005b81811015610b7957600060606109f76123ae565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663ff1fd974905060e01b8a8a8a8881518110610a4157fe5b6020026020010151604051602401610a5b939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610ae491906140b9565b6000604051808303818686fa925050503d8060008114610b20576040519150601f19603f3d011682016040523d82523d6000602084013e610b25565b606091505b50909250905060008215610b4e5781806020019051610b479190810190613d6e565b9050610b56565b505050610b79565b80868581518110610b6357fe5b60209081029190910101525050506001016109e3565b50509392505050565b6060610b8e8385611fee565b8151604080518281526020808402820101909152818015610bb9578160200160208202803883390190505b5091506000610bc66123c6565b90506000805b83811015610caa578273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480610c3957508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15610c6357610c5c8888888481518110610c4f57fe5b60200260200101516123de565b9150610c8a565b610c748884888481518110610c4f57fe5b91508115610c8a57610c878388846123de565b91505b81858281518110610c9757fe5b6020908102919091010152600101610bcc565b505050509392505050565b60608273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d1c57508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610d2657610d44565b6060610d33868585611001565b9050610d40848683611001565b9150505b949350505050565b6060610d588385611fee565b8151604080518281526020808402820101909152818015610d83578160200160208202803883390190505b5091506000610d906123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610dd057610dcb86612bfe565b610dd3565b60005b90506000610ddf6123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610e1f57610e1a86612bfe565b610e22565b60005b905060005b83811015610caa576001610e396123c6565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610ed0578651610eaf9085907f2640f62c00000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b6020026020010151612c90565b878481518110610ebb57fe5b60200260200101819350828152505050610fed565b610ed86123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f41578651610eaf9084907f59e9486200000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b8651600090610f7a9085907f59e9486200000000000000000000000000000000000000000000000000000000908b9087908110610ea257fe5b925090508015610fd057610faf857f2640f62c0000000000000000000000000000000000000000000000000000000083612c90565b888581518110610fbb57fe5b60200260200101819450828152505050610feb565b6000878481518110610fde57fe5b6020026020010181815250505b505b80610ff85750610caa565b50600101610e27565b606061100d8385611fee565b8151604080518281526020808402820101909152818015611038578160200160208202803883390190505b50915060005b81811015610b7957600060606110526123ae565b73ffffffffffffffffffffffffffffffffffffffff16620f4240600073ffffffffffffffffffffffffffffffffffffffff1663144a2752905060e01b898b8a888151811061109c57fe5b60200260200101516040516024016110b6939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161113f91906140b9565b6000604051808303818686fa925050503d806000811461117b576040519150601f19603f3d011682016040523d82523d6000602084013e611180565b606091505b50909250905060008215610b4e57818060200190516111a29190810190613d6e565b9050808685815181106111b157fe5b602090810291909101015250505060010161103e565b6040805182815260208084028201019091526060908280156111fd57816020015b60608152602001906001900390816111e85790505b50905060005b80831461130657600060603086868581811061121b57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261125557600080fd5b9091016020810191503567ffffffffffffffff81111561127457600080fd5b3681900382131561128457600080fd5b6040516112929291906140a9565b600060405180830381855afa9150503d80600081146112cd576040519150601f19603f3d011682016040523d82523d6000602084013e6112d2565b606091505b5091509150816112e457805160208201fd5b808484815181106112f157fe5b60209081029190910101525050600101611203565b5092915050565b60606113198385611fee565b8151604080518281526020808402820101909152818015611344578160200160208202803883390190505b50915060006113516123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146113915761138c86612bfe565b611394565b60005b905060006113a06123c6565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146113e0576113db86612bfe565b6113e3565b60005b905060005b83811015610caa5760016113fa6123c6565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156114845786516114639085907f95b68fe700000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b87848151811061146f57fe5b602002602001018193508281525050506115a1565b61148c6123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156114f55786516114639084907fcd7724c300000000000000000000000000000000000000000000000000000000908a9086908110610ea257fe5b865160009061152e9086907f95b68fe700000000000000000000000000000000000000000000000000000000908b9087908110610ea257fe5b92509050801561158457611563847fcd7724c30000000000000000000000000000000000000000000000000000000083612c90565b88858151811061156f57fe5b6020026020010181945082815250505061159f565b600087848151811061159257fe5b6020026020010181815250505b505b806115ac5750610caa565b506001016113e8565b60408401516060907fffffffff000000000000000000000000000000000000000000000000000000001661164f57604080516060810190915261164890806116018689608084016143bf565b604051602081830303815290604052815260200186886040516020016116289291906143bf565b6040516020818303038152906040528152602001612dd9815250836121d9565b9050610d44565b815160408051828152602080840282010190915281801561167a578160200160208202803883390190505b50915060005b8181101561099c5760006060886000015173ffffffffffffffffffffffffffffffffffffffff16620927c08a604001518a8a8a88815181106116be57fe5b60200260200101516040516024016116d8939291906143a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161176191906140b9565b6000604051808303818686fa925050503d806000811461179d576040519150601f19603f3d011682016040523d82523d6000602084013e6117a2565b606091505b5090925090506000821561097157818060200190516117c49190810190613d6e565b9050808685815181106117d357fe5b6020908102919091010152505050600101611680565b60606000825190508060405190808252806020026020018201604052801561181b578160200160208202803883390190505b509150600061182b878787611c3e565b905073ffffffffffffffffffffffffffffffffffffffff81166118505750610d449050565b60005b828110156119e257600060608373ffffffffffffffffffffffffffffffffffffffff1662061a80600073ffffffffffffffffffffffffffffffffffffffff1663343fbcdd905060e01b8b8b8b88815181106118aa57fe5b60200260200101516040516024016118c4939291906141d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161194d91906140b9565b6000604051808303818686fa925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b509092509050600082156119b757818060200190516119b09190810190613d6e565b90506119bf565b5050506119e2565b808785815181106119cc57fe5b6020908102919091010152505050600101611853565b505050949350505050565b6040805160608181019092526105289080611a0c86896080840161412f565b60405160208183030381529060405281526020018688604051602001611a3392919061412f565b6040516020818303038152906040528152602001612f70815250836121d9565b606060008251905080604051908082528060200260200182016040528015611a85578160200160208202803883390190505b50915060005b81811015611c365760006060611a9f612fea565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f905060e01b888681518110611ae757fe5b60200260200101518a604051602401611b019291906145b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611b8a91906140b9565b6000604051808303818686fa925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b50909250905060008215611c0b5781806020019051611bed9190810190613a5c565b600189510381518110611bfc57fe5b60200260200101519050611c13565b505050611c36565b80868581518110611c2057fe5b6020908102919091010152505050600101611a8b565b505092915050565b6040516000906060907f153f59970000000000000000000000000000000000000000000000000000000090611c79908690869060240161412f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608673ffffffffffffffffffffffffffffffffffffffff1683604051611d0191906140b9565b600060405180830381855afa9150503d8060008114611d3c576040519150601f19603f3d011682016040523d82523d6000602084013e611d41565b606091505b5091509150818015611d54575080516020145b15611d6e57611d6481600c613002565b9350505050610334565b5050509392505050565b606060008251905080604051908082528060200260200182016040528015611daa578160200160208202803883390190505b50915060005b81811015611c365760006060611dc4612fea565b73ffffffffffffffffffffffffffffffffffffffff16620249f0600073ffffffffffffffffffffffffffffffffffffffff16631f00ca74905060e01b888681518110611e0c57fe5b60200260200101518a604051602401611e269291906145b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611eaf91906140b9565b6000604051808303818686fa925050503d8060008114611eeb576040519150601f19603f3d011682016040523d82523d6000602084013e611ef0565b606091505b50909250905060008215611c0b5781806020019051611f129190810190613a5c565b600081518110611f1e57fe5b6020026020010151905080868581518110611f3557fe5b6020908102919091010152505050600101611db0565b6060611f58848484610531565b905060005b84518110156107e657818181518110611f7257fe5b6020026020010151600014611fe657611fcd828281518110611f9057fe5b6020026020010151868381518110611fa457fe5b602002602001015160a00151878481518110611fbc57fe5b602002602001015160800151613047565b828281518110611fd957fe5b6020026020010181815250505b600101611f5d565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612054906143d7565b60405180910390fd5b5050565b60008060603073ffffffffffffffffffffffffffffffffffffffff16634cb8e25360e01b8780602001905161209991908101906136a1565b878060200190516120ad91908101906136a1565b6120b688613089565b6040516024016120c8939291906140f6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161215191906140b9565b600060405180830381855afa9150503d806000811461218c576040519150601f19603f3d011682016040523d82523d6000602084013e612191565b606091505b5091509150816121a657600092505050610334565b808060200190516121ba9190810190613a5c565b6000815181106121c657fe5b6020026020010151925050509392505050565b60608151604051908082528060200260200182016040528015612206578160200160208202803883390190505b509050815160001415612218576123a8565b6000612249846000015185602001518560008151811061223457fe5b6020026020010151876040015163ffffffff16565b90508061225657506123a8565b60006122738560200151866000015184886040015163ffffffff16565b90508061228257506123a89050565b60005b84518110156123a45760005b6005811015612366576122b88683815181106122a957fe5b60200260200101518486613047565b93506122c961271561271086613047565b935060006122e888602001518960000151878b6040015163ffffffff16565b9050806122f55750612366565b80935086838151811061230457fe5b6020026020010151841061235d57600087848151811061232057fe5b602002602001015161271089868151811061233757fe5b60200260200101518703028161234957fe5b0490506005811161235b575050612366565b505b50600101612291565b5061238585828151811061237657fe5b60200260200101518385613047565b84828151811061239157fe5b6020908102919091010152600101612285565b5050505b92915050565b73794e6e91555438afc3ccf1c5076a74f42133d08d90565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b60008060006123eb6130ca565b9150915060608173ffffffffffffffffffffffffffffffffffffffff16633d3dc52c6124156123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161461244d578861244f565b875b6040518263ffffffff1660e01b815260040161246b91906140d5565b60006040518083038186803b15801561248357600080fd5b505afa158015612497573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526124dd9190810190613a5c565b604080516000808252602082019092529192505b8251811015612796576040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b90612560907331e085afd48a1d6e51cc193153d625e8f0514c7f906004016140d5565b60206040518083038186803b15801561257857600080fd5b505afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125b09190810190613d6e565b8382815181106125bc57fe5b6020026020010151148061269757506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b90612631907310908c875d865c66f271f5d3949848971c9595c9906004016140d5565b60206040518083038186803b15801561264957600080fd5b505afa15801561265d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126819190810190613d6e565b83828151811061268d57fe5b6020026020010151145b8061276957506040517f106e9a4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063106e9a4b9061270390731e158c0e93c30d24e918ef83d1e0be23595c3c0f906004016140d5565b60206040518083038186803b15801561271b57600080fd5b505afa15801561272f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127539190810190613d6e565b83828151811061275f57fe5b6020026020010151145b1561278e5761278b8284838151811061277e57fe5b60200260200101516131fe565b91505b6001016124f1565b5060606127a16123c6565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156128b8578473ffffffffffffffffffffffffffffffffffffffff166381efcbdd89600285600060405190808252806020026020018201604052801561281f578160200160208202803883390190505b506040518563ffffffff1660e01b815260040161283f949392919061425c565b60006040518083038186803b15801561285757600080fd5b505afa15801561286b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526128b19190810190613d86565b9050612998565b8473ffffffffffffffffffffffffffffffffffffffff166381efcbdd8a6002856000604051908082528060200260200182016040528015612903578160200160208202803883390190505b506040518563ffffffff1660e01b8152600401612923949392919061425c565b60006040518083038186803b15801561293b57600080fd5b505afa15801561294f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526129959190810190613d86565b90505b600060606129a4613294565b73ffffffffffffffffffffffffffffffffffffffff166216e3607f418436bc000000000000000000000000000000000000000000000000000000006129e76123c6565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612a1f578d612a35565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b612a3d6123c6565b73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612a75578d612a8b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b8d600089604051602401612aa3959493929190614209565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612b2c91906140b9565b6000604051808303818686fa925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b50909250905060008215612b965781806020019051612b8f9190810190613d6e565b9050612ba7565b600098505050505050505050610334565b6000612bb28c6132ac565b60ff1690506000612bc28e6132ac565b60ff169050670de0b6b3a764000081600a0a83600a0a8e86020281612be357fe5b0481612beb57fe5b049e9d5050505050505050505050505050565b6000612c086132b7565b73ffffffffffffffffffffffffffffffffffffffff166306f2bf62836040518263ffffffff1660e01b8152600401612c4091906140d5565b60206040518083038186803b158015612c5857600080fd5b505afa158015612c6c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123a891908101906136a1565b60008073ffffffffffffffffffffffffffffffffffffffff8516612cb357612dd1565b60608573ffffffffffffffffffffffffffffffffffffffff16620249f08686604051602401612ce291906145af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612d6b91906140b9565b6000604051808303818686fa925050503d8060008114612da7576040519150601f19603f3d011682016040523d82523d6000602084013e612dac565b606091505b5090925090508115612dcf5780806020019051612dcc9190810190613d6e565b92505b505b935093915050565b600080612de4613555565b85806020019051612df89190810190613e0f565b91509150600085806020019051612e129190810190613df3565b905060006060307f40bc03ae00000000000000000000000000000000000000000000000000000000858786612e468c613089565b604051602401612e599493929190614434565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612ee291906140b9565b600060405180830381855afa9150503d8060008114612f1d576040519150601f19603f3d011682016040523d82523d6000602084013e612f22565b606091505b509150915081612f3a57600095505050505050610334565b80806020019051612f4e9190810190613a5c565b600081518110612f5a57fe5b6020026020010151955050505050509392505050565b600080600085806020019051612f8991908101906136bd565b91509150600085806020019051612fa391908101906136a1565b905060006060307f9f76ad3500000000000000000000000000000000000000000000000000000000858786612fd78c613089565b604051602401612e599493929190614156565b73f164fc0ec4e93095b804a4795bbe1e041497b92a90565b600081601401835110156130285761302861302360048551856014016132cf565b613374565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60006103318361307d61306182600163ffffffff61337c16565b613071888763ffffffff61339b16565b9063ffffffff6133cc16565b9063ffffffff6133e816565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181106130b957fe5b602002602001018181525050919050565b6000806130d5613294565b73ffffffffffffffffffffffffffffffffffffffff1663b78b842d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561311a57600080fd5b505afa15801561312e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061315291908101906136a1565b73ffffffffffffffffffffffffffffffffffffffff1663c3a2a93a6040518163ffffffff1660e01b815260040160006040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526131f19190810190613899565b5091955093505050509091565b6060825160010160405190808252806020026020018201604052801561322e578160200160208202803883390190505b50905060005b83518110156132705783818151811061324957fe5b602002602001015182828151811061325d57fe5b6020908102919091010152600101613234565b50818160018351038151811061328257fe5b60200260200101818152505092915050565b739aab3f75489902f3a48495025729a0af77d4b11e90565b60006123a882613412565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9590565b6060632800659560e01b8484846040516024016132ee93929190614393565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008282111561339557613395613023600285856134e3565b50900390565b6000826133aa575060006123a8565b828202828482816133b757fe5b041461033457610334613023600186866134e3565b60008282018381101561033457610334613023600086866134e3565b6000816133fe576133fe613023600385856134e3565b600082848161340957fe5b04949350505050565b600060129050600060608373ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600481526020017f313ce5670000000000000000000000000000000000000000000000000000000081525060405161347691906140b9565b600060405180830381855afa9150503d80600081146134b1576040519150601f19603f3d011682016040523d82523d6000602084013e6134b6565b606091505b50915091508180156134c9575080516020145b156134dc576134d9816000613502565b92505b5050919050565b606063e946c1bb60e01b8484846040516024016132ee93929190614372565b600061033483836000816020018351101561352a5761352a61302360058551856020016132cf565b50016020015190565b6040805160608101909152806000815260006020820181905260409091015290565b604080516060810182526000808252602082018190529181019190915290565b80356123a8816146e2565b600082601f830112613590578081fd5b81356135a361359e82614643565b61461c565b8181529150602080830190840160005b838110156135e0576135cb8760208435890101613653565b835260209283019291909101906001016135b3565b5050505092915050565b600082601f8301126135fa578081fd5b813561360861359e82614643565b81815291506020808301908481018184028601820187101561362957600080fd5b60005b848110156136485781358452928201929082019060010161362c565b505050505092915050565b600082601f830112613663578081fd5b813561367161359e82614663565b915080825283602082850101111561368857600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156136b2578081fd5b8151610334816146e2565b600080604083850312156136cf578081fd5b82516136da816146e2565b60208401519092506136eb816146e2565b809150509250929050565b60008060006060848603121561370a578081fd5b8335613715816146e2565b92506020840135613725816146e2565b91506040840135613735816146e2565b809150509250925092565b600080600080600060a08688031215613757578283fd5b8535613762816146e2565b94506020860135613772816146e2565b93506040860135613782816146e2565b92506060860135613792816146e2565b9150608086013567ffffffffffffffff8111156137ad578182fd5b6137b9888289016135ea565b9150509295509295909350565b600080600080608085870312156137db578182fd5b84356137e6816146e2565b935060208501356137f6816146e2565b92506040850135613806816146e2565b9150606085013567ffffffffffffffff811115613821578182fd5b61382d878288016135ea565b91505092959194509250565b60008060006060848603121561384d578081fd5b8335613858816146e2565b92506020840135613868816146e2565b9150604084013567ffffffffffffffff811115613883578182fd5b61388f868287016135ea565b9150509250925092565b60008060008060008060c087890312156138b1578384fd5b86516138bc816146e2565b809650506020808801516138cf816146e2565b60408901519096506138e0816146e2565b60608901519095506138f1816146e2565b6080890151909450613902816146e2565b60a089015190935067ffffffffffffffff81111561391e578283fd5b8089018a601f82011261392f578384fd5b8051915061393f61359e83614643565b82815283810190828501858502840186018e101561395b578687fd5b8693505b84841015613986578051613972816146e2565b83526001939093019291850191850161395f565b5080955050505050509295509295509295565b600080604083850312156139ab578182fd5b823567ffffffffffffffff808211156139c2578384fd5b81850186601f8201126139d3578485fd5b803592506139e361359e84614643565b80848252602080830192508084018a828389028701011115613a03578889fd5b8894505b86851015613a2e578035613a1a816146e2565b845260019490940193928101928101613a07565b509096508701359350505080821115613a45578283fd5b50613a52858286016135ea565b9150509250929050565b60006020808385031215613a6e578182fd5b825167ffffffffffffffff811115613a84578283fd5b80840185601f820112613a95578384fd5b80519150613aa561359e83614643565b8281528381019082850185850284018601891015613ac1578687fd5b8693505b84841015613ae3578051835260019390930192918501918501613ac5565b50979650505050505050565b60008060208385031215613b01578182fd5b823567ffffffffffffffff80821115613b18578384fd5b81850186601f820112613b29578485fd5b8035925081831115613b39578485fd5b8660208085028301011115613b4c578485fd5b60200196919550909350505050565b600080600060608486031215613b6f578081fd5b67ffffffffffffffff8085351115613b85578182fd5b8435850186601f820112613b97578283fd5b613ba461359e8235614643565b8135815260208082019190808401865b8535811015613d3157813586016101c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828f03011215613bf3578889fd5b613bfe6101c061461c565b613c0a8e868401613575565b8152613c198e60408401613575565b85820152613c2a8e60608401613575565b6040820152613c3c8e60808401613575565b606082015260a0820135608082015260c082013560a082015260e082013560c082015261010082013560e082015261012082013561010082015261014082013561012082015261016082013589811115613c94578a8bfd5b613ca28f8783860101613653565b6101408301525061018082013589811115613cbb578a8bfd5b613cc98f8783860101613653565b610160830152506101a082013589811115613ce2578a8bfd5b613cf08f8783860101613653565b610180830152506101c082013589811115613d09578a8bfd5b613d178f8783860101613653565b6101a0830152508652509382019390820190600101613bb4565b509197508801359250505081811115613d48578283fd5b613d5487828801613580565b93505050613d658560408601613575565b90509250925092565b600060208284031215613d7f578081fd5b5051919050565b600060208284031215613d97578081fd5b815167ffffffffffffffff811115613dad578182fd5b80830184601f820112613dbe578283fd5b80519150613dce61359e83614663565b828152856020848401011115613de2578384fd5b6105288360208301602085016146a5565b600060208284031215613e04578081fd5b815161033481614732565b60008060808385031215613e21578182fd5b8251613e2c81614732565b915060608385037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613e5f578081fd5b613e69606061461c565b6020840151613e77816146e2565b81526040840151613e8781614704565b60208201526060840151613e9a81614704565b6040820152919491935090915050565b60008060008084860360c0811215613ec0578283fd5b6060811215613ecd578283fd5b50613ed8606061461c565b8535613ee3816146e2565b81526020860135613ef381614704565b60208201526040860135613f0681614704565b604082015293506060850135613f1b81614732565b92506080850135613f2b81614732565b915060a085013567ffffffffffffffff811115613821578182fd5b600080600083850360a0811215613f5b578182fd5b6060811215613f68578182fd5b50613f73606061461c565b845160078110613f81578283fd5b815260208581015190820152604080860151908201526060850151608086015191945092508015158114613735578182fd5b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b82811015613ffe578151865260209586019590910190600101613fe0565b5093949350505050565b600081518084526140208160208601602086016146a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805173ffffffffffffffffffffffffffffffffffffffff1682526020808201517fffffffff000000000000000000000000000000000000000000000000000000009081169184019190915260409182015116910152565b6000828483379101908152919050565b600082516140cb8184602087016146a5565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526105286060830184613fcd565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152808516604084015250608060608301526141976080830184613fcd565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260ff8416606083015260a0608083015261425160a0830184614008565b979650505050505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff87168352614284866146d5565b60208381018790526080604085015285519182905285019060a0840190835b818110156142c15783518352602093840193909201916001016142a3565b505083810360608501526142d58186613fcd565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614352577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614340858351614008565b94509285019290850190600101614306565b5092979650505050505050565b6000602082526103346020830184613fcd565b6060810161437f856146d5565b938152602081019290925260409091015290565b606081016008851061437f57fe5b600f93840b81529190920b6020820152604081019190915260600190565b600f83900b8152608081016103346020830184614052565b60208082526025908201527f455243323042726964676553616d706c65722f494e56414c49445f544f4b454e60408201527f5f50414952000000000000000000000000000000000000000000000000000000606082015260800190565b60006144408287614052565b84600f0b606083015283600f0b608083015260c060a083015261419760c0830184613fcd565b60006040825261447a604083018551613fb3565b602084015161448c6060840182613fb3565b50604084015161449f6080840182613fb3565b5060608401516144b260a0840182613fb3565b50608084015160c083015260a084015160e083015260c0840151610100818185015260e086015191506101208281860152818701519250610140915082828601528087015192505061016082818601528187015192506101c091506101808281870152614523610200870185614008565b8289015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc092506101a08388830301818901526145628287614008565b838b015196508489820301868a015261457b8188614008565b955050808a0151955050505080858303016101e08601525061459d8183614008565b84810360208601526142518187614008565b90815260200190565b60006040820184835260406020840152808451808352606085019150602086019250835b8181101561461057835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016145dc565b50909695505050505050565b60405181810167ffffffffffffffff8111828210171561463b57600080fd5b604052919050565b600067ffffffffffffffff821115614659578081fd5b5060209081020190565b600067ffffffffffffffff821115614679578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156146c05781810151838201526020016146a8565b838111156146cf576000848401525b50505050565b600481106146df57fe5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146146df57600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146146df57600080fd5b80600f0b81146146df57600080fdfea365627a7a72315820b6fbcf4008958c944ebfec299da165bd697cf68b9711b57b06ab81852a3933ff6c6578706572696d656e74616cf564736f6c63430005110040" } } },