diff --git a/crates/test_fixtures/abis/RaindexV6.json b/crates/test_fixtures/abis/RaindexV6.json index 9035fe6a31..6c201d3645 100644 --- a/crates/test_fixtures/abis/RaindexV6.json +++ b/crates/test_fixtures/abis/RaindexV6.json @@ -2352,7 +2352,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f24806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614932565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461499a565b6102ba565b61010761013d366004614a05565b5f9081526020819052604090205460011490565b61016461015f366004614a3b565b610408565b005b610179610174366004614aa0565b61054e565b604051908152602001610113565b610107610195366004614ade565b610562565b6101646101a8366004614a3b565b610662565b6101796101bb366004614b75565b6107f5565b6101d36101ce366004614ba6565b61085d565b60408051928352602083019190915201610113565b6101076101f6366004614bd8565b610ff6565b61020e610209366004614c22565b6112c5565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c59565b611387565b6040516101139190614cc6565b610164610259366004614c59565b61146d565b61017961026c366004614d28565b6114c7565b61016461027f36600461519a565b611561565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a3a565b6102d06020850185614b75565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b75565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615254565b611a55565b5f818152602081905260409020549091505f19016103ea575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153aa565b60405180910390a160408051600381526020810183905233818301525f6060820152608081019091526103ea906103db905b60408051600181526020810192909252818101905290565b6103e5858761546e565b611a84565b5061040160015f80516020615f0483398151915255565b9392505050565b610410611a3a565b33858561041e838383611c52565b610428865f611c88565b61045d576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f8061046a338b8a611cc2565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f806104cd338d8d8d611d9c565b9092509050871561052a5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c0810190915261052a90610520906103c3565b6103e58a8c61546e565b5050505050505061054760015f80516020615f0483398151915255565b5050505050565b5f61055a848484611e8c565b949350505050565b5f6105776001600160a01b038616878661206e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105af9033908a908a9087908b908b9060040161552e565b6020604051808303815f875af11580156105cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ef9190615572565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461063457604051630b6c58a960e31b815260048101829052602401610316565b61065587306106435f8961559d565b6001600160a01b038a169291906120a3565b5060019695505050505050565b61066a611a3a565b338585610678838383611c52565b5f8080806106868a82611c88565b6106ba57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f6106c6338e8e611e8c565b90506106d28b826120df565b94506106e0338e8e886120fb565b90935091505f6106f1338f88612172565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610763969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107d6576107d6816103e58c8e61546e565b50505050505050505061054760015f80516020615f0483398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610839573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615572565b5f80610867611a3a565b61087460808401846155b0565b90505f0361089557604051639c95219f60e01b815260040160405180910390fd5b61089d61485a565b6108a5614886565b5f60405180606001604052808780608001906108c191906155b0565b5f8181106108d1576108d16155f6565b90506020028101906108e3919061560a565b6108ed9080615628565b6108fb90604081019061563c565b61090860808b018b6155b0565b5f818110610918576109186155f6565b905060200281019061092a919061560a565b6020013581811061093d5761093d6155f6565b6109539260206040909202019081019150614b75565b6001600160a01b0316815260200161096e60808901896155b0565b5f81811061097e5761097e6155f6565b9050602002810190610990919061560a565b61099a9080615628565b6109a890606081019061563c565b6109b560808b018b6155b0565b5f8181106109c5576109c56155f6565b90506020028101906109d7919061560a565b604001358181106109ea576109ea6155f6565b610a009260206040909202019081019150614b75565b6001600160a01b03168152602088810135910152905060605f610a2660808901896155b0565b604080516001909201602002820181528501519093505f9250610a4a915082611c88565b610a675760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a7660808a018a6155b0565b905081108015610a9057506040840151610a90905f611c88565b15610e9e57610aa260808a018a6155b0565b82818110610ab257610ab26155f6565b9050602002810190610ac4919061560a565b610acd90615682565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610afc57610afc6155f6565b60200260200101515f01516001600160a01b0316141580610b57575083602001516001600160a01b03168560600151876040015181518110610b4057610b406155f6565b60200260200101515f01516001600160a01b031614155b15610b755760405163936bb5ad60e01b815260040160405180910390fd5b610b888587602001518860400151612235565b5f610b9286611a55565b5f81815260208190526040902054909150610bf7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e95565b5f610c548789602001518a60400151338c606001515f67ffffffffffffffff811115610c2557610c25614d52565b604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b506122a7565b90505f610c728c604001358360600151611c8890919063ffffffff16565b15610cc8578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e87565b6040820151610cd7905f611c88565b1580610cef57506060820151610ced905f611c88565b155b15610d3c578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610cbb565b600190505f808d6060016020810190610d559190615718565b15610d9b576040808a015190850151610d6d916120df565b6060850151909250610d7f9083612839565b60408a0151909150610d919083612886565b60408a0152610e02565b5f610db78560400151866060015161283990919063ffffffff16565b9050610dd08a60400151826120df90919063ffffffff16565b9150610de98560600151836128b690919063ffffffff16565b60408b0151909350610dfb9083612886565b60408b0152505b610e0c8c826128e6565b9b50610e188d836128e6565b9c50610e248285612916565b610e2e81856129d7565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e639493929190615840565b60405180910390a187516001018089526020028801849052610e8484612b83565b50505b8480610e905750805b945050505b50600101610a69565b505f610eb060808a0160608b01615718565b610eba5786610ebc565b875b9050610ec9818a35612dc6565b15610ef15760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610f0133846020015189612172565b505f9050610f1260a08a018a61592a565b9050118015610f1e5750805b15610f905760208301518351339163691f9ed7918a8a610f4160a08f018f61592a565b6040518763ffffffff1660e01b8152600401610f629695949392919061552e565b5f604051808303815f87803b158015610f79575f80fd5b505af1158015610f8b573d5f803e3d5ffd5b505050505b610f9e33845f015188611cc2565b50505f5b8251811015610fd557610fcd838281518110610fc057610fc06155f6565b6020026020010151612e00565b600101610fa2565b505050505050610ff160015f80516020615f0483398151915255565b915091565b5f610fff611a3a565b61100c602085018561563c565b90505f0361102d57604051636c44ef8f60e01b815260040160405180910390fd5b61103a604085018561563c565b90505f0361105b5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f9060208101611079878061596d565b61108290615981565b8152602001868060200190611097919061563c565b808060200260200160405190810160405280939291908181526020015f905b828210156110e2576110d36040830286013681900381019061598c565b815260200190600101906110b6565b50505091835250506020016110fa604088018861563c565b808060200260200160405190810160405280939291908181526020015f905b82821015611145576111366040830286013681900381019061598c565b81526020019060010190611119565b50505050508152602001866060013581525090505f61116382611a55565b5f818152602081905260409020549091501580156112ab575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f916111c191859087906159a6565b60405180910390a15f6111d760a089018961592a565b90501115611273576112286111ef60a089018961592a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612f0a92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec369908361125a60a08b018b61592a565b60405161126a94939291906159cd565b60405180910390a15b60408051600381526020810184905233818301525f6060820152608081019091526112ab906112a1906103c3565b6103e5878961546e565b9250505061040160015f80516020615f0483398151915255565b5f8080806112df6112d68680615628565b61032c90615254565b5f8181526020819052604090205490915060011461130657505f9250829150819050611380565b61132b6113138680615628565b61131c90615254565b86602001358760400135612235565b5f6113696113398780615628565b61134290615254565b602088013560408901353361135a60608c018c6155b0565b611363916159ff565b5f610c25565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113b1576113b1614d52565b6040519080825280602002602001820160405280156113e457816020015b60608152602001906001900390816113cf5790505b5091505f5b838110156114655761144030868684818110611407576114076155f6565b9050602002810190611419919061592a565b8560405160200161142c93929190615a0b565b604051602081830303815290604052612f35565b838281518110611452576114526155f6565b60209081029190910101526001016113e9565b505092915050565b611475611a3a565b604080515f808252602082019092526114ad916114a2565b606081526020019060019003908161148d5790505b506103e5838561546e565b6114c360015f80516020615f0483398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f9190615572565b5f0361155957604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b611569611a3a565b835185516001600160a01b0391821691160361159857604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115b2576115b26155f6565b60200260200101515f01516001600160a01b031685606001518460200135815181106115e0576115e06155f6565b60200260200101515f01516001600160a01b03161415806116595750604085015180518435908110611614576116146155f6565b60200260200101515f01516001600160a01b03168460600151846060013581518110611642576116426155f6565b60200260200101515f01516001600160a01b031614155b156116775760405163936bb5ad60e01b815260040160405180910390fd5b8460600151836020013581518110611691576116916155f6565b60200260200101515f01516001600160a01b03168560400151845f0135815181106116be576116be6155f6565b60200260200101515f01516001600160a01b0316036116f057604051631cd2f1c760e21b815260040160405180910390fd5b5f805f6116fc88611a55565b81526020019081526020015f20540361176c577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333865f015161173e88611a55565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611a24565b5f805f61177887611a55565b81526020019081526020015f2054036117ba577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333855f015161173e87611a55565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e39338686866040516117ef9493929190615a2e565b60405180910390a183515f906118119087908635906020880135908686610c25565b90505f61184086866040013587606001358a5f0151885f67ffffffffffffffff811115610c2557610c25614d52565b90505f61184d8383612fd5565b905061185c815f015184612916565b61186a816020015183612916565b6118788160400151846129d7565b6118868160600151836129d7565b61188f83612e00565b61189882612e00565b606081015181515f916118ab9190612886565b90505f6118c98360400151846020015161288690919063ffffffff16565b90506118d5825f612dc6565b806118e557506118e5815f612dc6565b1561190357604051630d86822160e01b815260040160405180910390fd5b611937338b606001518a6020013581518110611921576119216155f6565b60200260200101515f01518a6080013585611d9c565b505061196d338a606001518a6060013581518110611957576119576155f6565b60200260200101515f01518a60a0013584611d9c565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a16119d683612b83565b6119df82612b83565b80516001600160e01b0316158015611a02575060208101516001600160e01b0316155b15611a20576040516321badf1f60e01b815260040160405180910390fd5b5050505b61054760015f80516020615f0483398151915255565b611a42613023565b60025f80516020615f0483398151915255565b5f81604051602001611a679190615aaa565b604051602081830303815290604052805190602001209050919050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611c4857868181518110611aeb57611aeb6155f6565b602002602001015193505f845f015160400151511115611c40575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611b638d8a60200151613054565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611b8e9190615b14565b5f60405180830381865afa158015611ba8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bcf9190810190615c0c565b9150505f81511115611c3e5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611c10908a908590600401615cc2565b5f604051808303815f87803b158015611c27575f80fd5b505af1158015611c39573d5f803e3d5ffd5b505050505b505b600101611ad0565b5050505050505050565b80611c83576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611cb684848484613336565b12979650505050505050565b5f805f80611ccf8661340a565b90925090506001826003811115611ce857611ce8615cda565b14158015611d0757505f826003811115611d0457611d04615cda565b14155b15611d2957858260405163ee07877f60e01b8152600401610316929190615cee565b611d33855f612dc6565b15611d5157604051632eaefac360e21b815260040160405180910390fd5b5f80611d5d8784613497565b9150915080611d7257611d6f82615d27565b91505b8115611d8d57611d8d6001600160a01b0389168a30856120a3565b5093509150505b935093915050565b5f80611da88382612dc6565b15611dc95760405163793a8f5560e01b815260048101849052602401610316565b83611de757611dd9868685612172565b505f9250829150611e839050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e2182866128e6565b9050611e2d815f612dc6565b15611e4e5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b5f8115611ec657506001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054610401565b5f80611ed1856134c4565b90925090506001826003811115611eea57611eea615cda565b14158015611f0957505f826003811115611f0657611f06615cda565b14155b15611f2b57848260405163ee07877f60e01b8152600401610316929190615cee565b6040516370a0823160e01b81526001600160a01b0387811660048301525f91611f9f918816906370a0823190602401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190615572565b83613523565b50604051636eb1769f60e11b81526001600160a01b0389811660048301523060248301529192505f9161201e919089169063dd62ed3e90604401602060405180830381865afa158015611ff4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120189190615572565b84613523565b506001600160a01b03808a165f908152600160209081526040808320938c168352928152828220828052905220549091506120639061205d84846120df565b906128e6565b945050505050610401565b61207b8383836001613563565b611c8357604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b18484848460016135c5565b6120d957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ea8383612dc6565b6120f45781610401565b5090919050565b5f806121078382612dc6565b156121285760405163793a8f5560e01b815260048101849052602401610316565b8361213857611dd9868685611cc2565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e218286612886565b5f805f8061217f8661340a565b9092509050600182600381111561219857612198615cda565b141580156121b757505f8260038111156121b4576121b4615cda565b14155b156121d957858260405163ee07877f60e01b8152600401610316929190615cee565b6121e3855f612dc6565b1561220157604051632d1671a360e11b815260040160405180910390fd5b5f61220c8683613497565b5090508015612229576122296001600160a01b038816898361206e565b97909650945050505050565b8260600151818151811061224b5761224b6155f6565b60200260200101515f01516001600160a01b031683604001518381518110612275576122756155f6565b60200260200101515f01516001600160a01b031603611c8357604051631cd2f1c760e21b815260040160405180910390fd5b6122af6148ed565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122ca57905050905061231f6122ed8a611a55565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b816001800381518110612334576123346155f6565b60200260200101819052505f8061236a8b604001518b8151811061235a5761235a6155f6565b60200260200101515f01516134c4565b9092509050600182600381111561238357612383615cda565b141580156123a257505f82600381111561239f5761239f615cda565b14155b156123e4578a604001518a815181106123bd576123bd6155f6565b60200260200101515f01518260405163ee07877f60e01b8152600401610316929190615cee565b5f6124348c5f01518d604001518d81518110612402576124026155f6565b60200260200101515f01518e604001518e81518110612423576124236155f6565b602002602001015160200151611e8c565b90506124c38c604001518c8151811061244f5761244f6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e604001518e81518110612481576124816155f6565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b846001600303815181106124d9576124d96155f6565b60200260200101819052505050505f806125028b606001518a8151811061235a5761235a6155f6565b9092509050600182600381111561251b5761251b615cda565b1415801561253a57505f82600381111561253757612537615cda565b14155b15612555578a6060015189815181106123bd576123bd6155f6565b5f6125948c5f01518d606001518c81518110612573576125736155f6565b60200260200101515f01518e606001518d81518110612423576124236155f6565b90506125e18c606001518b815181106125af576125af6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e606001518d81518110612481576124816155f6565b846001600403815181106125f7576125f76155f6565b602002602001018190525050505061260f8186613054565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161266f87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156126a7576126a7614d52565b6040519080825280602002602001820160405280156126d0578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016126f69190615b14565b5f60405180830381865afa158015612710573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127379190810190615c0c565b91509150600282511015612763578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516127b79087906004908110612786576127866155f6565b60200260200101516003815181106127a0576127a06155f6565b6020026020010151826120df90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106127e9576127e96155f6565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613632565b915091505f6128788383613751565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806128698686868661379e565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612869868686866137c8565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613d05565b81816080015160048151811061292e5761292e6155f6565b6020026020010151600481518110612948576129486155f6565b6020026020010181815250506120d9815f01515f01518260800151600481518110612975576129756155f6565b60200260200101515f8151811061298e5761298e6155f6565b60200260200101515f1c83608001516004815181106129af576129af6155f6565b60200260200101516002815181106129c9576129c96155f6565b6020026020010151856120fb565b8181608001516003815181106129ef576129ef6155f6565b6020026020010151600481518110612a0957612a096155f6565b6020908102919091010152805151608082015180515f91906003908110612a3257612a326155f6565b60200260200101515f81518110612a4b57612a4b6155f6565b60200260200101515f1c90505f8360800151600381518110612a6f57612a6f6155f6565b6020026020010151600281518110612a8957612a896155f6565b602002602001015190505f801b8103612b3057612aa6855f612dc6565b15612ac75760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054612afe90866128e6565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612b3f565b612b3c83838388611d9c565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612b74929190615d3f565b60405180910390a15050505050565b60c08101515115612bfd578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612bcf929091600401615cc2565b5f604051808303815f87803b158015612be6575f80fd5b505af1158015612bf8573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612c538660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612c9357612c93614d52565b604051908082528060200260200182016040528015612cbc578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612cec578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612d0c9190615b14565b5f60405180830381865afa158015612d26573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d4d9190810190615c0c565b9150505f815111156114c3578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612d95918590600401615cc2565b5f604051808303815f87803b158015612dac575f80fd5b505af1158015612dbe573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612df484848484613336565b13979650505050505050565b5f8160800151600381518110612e1857612e186155f6565b6020026020010151600281518110612e3257612e326155f6565b602002602001015190505f801b81036114c357815151608083015180515f91906003908110612e6357612e636155f6565b60200260200101515f81518110612e7c57612e7c6155f6565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b03811615610547576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612f01838383612172565b50505050505050565b612f1381613e03565b612f325780604051630c89984b60e31b81526004016103169190615d60565b50565b60605f612f428484613e31565b9050808015612f6357505f3d1180612f6357505f846001600160a01b03163b115b15612f7857612f70613e44565b9150506102b4565b8015612fa257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612fb557612fb0613e5d565b612fce565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f8082526020820181905291810182905260608101919091526130028383613e68565b825260408201526130138284613e68565b6020830152606082015292915050565b5f80516020615f048339815191525460020361305257604051633ee5aeb560e01b815260040160405180910390fd5b565b60605f825167ffffffffffffffff81111561307157613071614d52565b60405190808252806020026020018201604052801561309a578160200160208202803683370190505b5090505f808451116130ac575f6130b2565b83516001015b85516001010190505f8167ffffffffffffffff8111156130d4576130d4614d52565b60405190808252806020026020018201604052801561310757816020015b60608152602001906001900390816130f25790505b5090505f61312b604080516002815233602082015230818301526060810190915290565b82828151811061313d5761313d6155f6565b60200260200101819052505f5b875181101561319a57818060010192505087818151811061316d5761316d6155f6565b6020026020010151838381518110613187576131876155f6565b602090810291909101015260010161314a565b5085511561332c578080600101915050838282815181106131bd576131bd6155f6565b60200260200101819052505f5b865181101561332a576132798782815181106131e8576131e86155f6565b60200260200101515f01516132566132248a858151811061320b5761320b6155f6565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613268576132686155f6565b602002602001015160400151613ed1565b61329957604051630a57f30960e31b815260048101829052602401610316565b8681815181106132ab576132ab6155f6565b60200260200101515f01516001600160a01b03165f1b8582815181106132d3576132d36155f6565b60200260200101818152505081806001019250508681815181106132f9576132f96155f6565b602002602001015160200151838381518110613317576133176155f6565b60209081029190910101526001016131ca565b505b5095945050505050565b5f808515841517818712828612181785841417801561335b5786859250925050611e83565b505f8584131561336f575092949193919260015b8386035f8112604c82131780156133a2578215613394575f8994509450505050611e83565b885f94509450505050611e83565b600a82900a8981028a8282816133ba576133ba615d72565b05146133e65784156133d6575f8b965096505050505050611e83565b8a5f965096505050505050611e83565b84156133fb578896509450611e839350505050565b9550879450611e839350505050565b5f80613414613f41565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af115801561346a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061348e9190615d86565b91509150915091565b5f806001600160e01b038416601b0b60e085901d6134b6828287613fcc565b9350935050505b9250929050565b5f806134ce613f41565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa15801561346a573d5f803e3d5ffd5b5f805f805f6135328787614132565b9250925092505f806135448585614175565b91509150818380156135535750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166135b95783831516156135ad573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316613621578383151615613615573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f808515841517801561364a575f92505f9150613747565b6136548487615dc6565b91505f6136608861424d565b90505f61366c8761424d565b90505f613679838361427b565b5090505f6f0785ee10d5da46d900f436a0000000008211156136ae576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156136cf57670de0b6b3a7640000820491506012015b633b9aca008211156136e857633b9aca00820491506009015b6127108211156136fd57612710820491506004015b811561371157600a820491506001016136fd565b61371b8187615dc6565b955061373d8b8a613737878761373287600a615ec5565b614297565b89614363565b9097509550505050505b5094509492505050565b5f805f61375e8585614175565b915091508015801561376e575081155b1561379657604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806137aa8484614403565b90945092506137bb86868686613d05565b9150915094509492505050565b5f80835f036137f457604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361380557505f905080611e83565b5f805f806138138a8a614458565b919b50995091506138248888614458565b919950975090505f6138358b61424d565b90505f6138418a61424d565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613c0657841561389857507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613bde565b6f4b3b4ca85a86c47a098a2240000000008310156139c457678ac7230489e80000831015613928576402540be4008310156138f657620186a08310156138e65750620186a090506005613b9f565b506402540be4009050600a613b9f565b655af3107a40008310156139155750655af3107a40009050600e613b9f565b50678ac7230489e8000090506013613b9f565b6b204fce5e3e2502611000000083101561397a5769152d02c7e14af6800000831015613963575069152d02c7e14af680000090506017613b9f565b506b204fce5e3e250261100000009050601c613b9f565b6d314dc6448d9338c15b0a000000008310156139a957506d314dc6448d9338c15b0a0000000090506021613b9f565b506f4b3b4ca85a86c47a098a22400000000090506026613b9f565b780197d4df19d605767337e9f14d3eec8920e400000000000000831015613abc5773af298d050e4395d69670b12b7f41000000000000831015613a57577172cb5bd86321e38cb6ce6682e80000000000831015613a3857507172cb5bd86321e38cb6ce6682e800000000009050602b613b9f565b5073af298d050e4395d69670b12b7f4100000000000090506030613b9f565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613a98575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613b9f565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613b9f565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613b52577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613b2a57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613b9f565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613b9f565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613b9f57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613bb457600a820491505f1901613b9f565b815f03613bde576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613c06576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613c1d57808d039c50613c5b565b600160ff1b9c90038c015f811315613c5b57806001600160ff1b03038b13613c4857998a0199613c5b565b5f80995099505050505050505050611e83565b5f808e128015613c6a57505f8c135b15613c8b57600160ff1b8e01808d13613c83575f613c87565b808d035b9150505b8b818f01039750613ca88f8e613ca2888789614297565b8b614363565b90995097505f811315613cf257604c811315613cd2575f809a509a50505050505050505050611e83565b80600a0a8981613ce457613ce4615d72565b059850885f03613cf2575f97505b50969850949650611e8395505050505050565b5f8085158415178015613d3157865f03613d255784849250925050611e83565b86869250925050611e83565b613d3b87876146b2565b9097509550613d4a85856146b2565b909550935085841315613d5e579395929492935b838603604c811115613d77578787935093505050611e83565b80600a0a8681613d8957613d89615d72565b0595505086850180881860ff90811c151589881890911c15168015613df257876001600160ff1b0303613dd95760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613df6565b8198505b5096979596505050505050565b5f600882511015613e1557505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613e858460600151856040015161283990919063ffffffff16565b915083604001519050613ea5836040015183611c8890919063ffffffff16565b156134bd5782604001519150613ec88460600151836128b690919063ffffffff16565b90509250929050565b5f836001600160a01b03163b5f03613f2f575f80613eef85856146fb565b5090925090505f816003811115613f0857613f08615cda565b148015613f265750856001600160a01b0316826001600160a01b0316145b92505050610401565b613f3a848484614741565b9050610401565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580613f98575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15613052576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f851215613ff957604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f0361400b57505f90506001611d94565b8460ff841685018581121561403d5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f83121561408957604c19831215614060575f809550955050505050611d94565b825f03600a0a915081848161407757614077615d72565b0495505084029091149150611d949050565b5f83131561412257604d8313156140c65760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f19816140dc576140dc615d72565b048411156141105760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611d949050565b8360019550955050505050611d94565b5f808060ff841681036001600160ff1b0386111561416457600a860460018201600a88065f149350935093505061416e565b8593509150600190505b9250925092565b5f601b83900b83148383826141d9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156141b957620186a0860595506005850194505b8586601b0b146141d457600a860595508460010194506141b9565b6141ef565b855f036141ef57505f9250600191506134bd9050565b848560030b14614232575f85121561420f57505f92508291506134bd9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561427257600160ff1b820361426c5750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6142a4868661427b565b91509150815f036142c8578381816142be576142be615d72565b0492505050610401565b8382106142f95760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156143df576001600160ff1b038411156143cc576143906001600160ff1b03600161559d565b84036143a45750600160ff1b905081611e83565b6143af600a85615ed0565b6143b890615eef565b6143c3846001615dc6565b91509150611e83565b6143d584615eef565b8391509150611e83565b6001600160ff1b038411156143f9576143b8600a85615ed0565b5082905081611e83565b5f80600160ff1b840361444e576001600160ff1b0383036144415760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361447057505f9150819050600161416e565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f0361465d576f4b3b4ca85a86c47a098a22400000000085051580156144d257507f80000000000000000000000000000000000000000000000000000000000000268412155b156144f3576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561453b57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561455457678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156145a057507f800000000000000000000000000000000000000000000000000000000000000a8412155b156145b6576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561460557507f80000000000000000000000000000000000000000000000000000000000000028412155b1561461b576064850294506002840393506145b6565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561464b57506001600160ff1b018412155b1561465d57600a850294506001840393505b600a8086029081058614801561467a57506001600160ff1b018512155b15614689578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6146c18787614458565b925092509250806146ef576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b5f805f8351604103614732576020840151604085015160608601515f1a61472488828585614792565b95509550955050505061416e565b505081515f915060029061416e565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147cb57505f91506003905082614850565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561481c573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661484757505f925060019150829050614850565b92505f91508190505b9450945094915050565b604051806080016040528061486d614886565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148d460405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e00160405280614900614886565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614942575f80fd5b81356001600160e01b031981168114610401575f80fd5b5f8083601f840112614969575f80fd5b50813567ffffffffffffffff811115614980575f80fd5b6020830191508360208260051b85010111156134bd575f80fd5b5f805f604084860312156149ac575f80fd5b833567ffffffffffffffff808211156149c3575f80fd5b9085019060a082880312156149d6575f80fd5b909350602085013590808211156149eb575f80fd5b506149f886828701614959565b9497909650939450505050565b5f60208284031215614a15575f80fd5b5035919050565b6001600160a01b0381168114612f32575f80fd5b803561427681614a1c565b5f805f805f60808688031215614a4f575f80fd5b8535614a5a81614a1c565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a83575f80fd5b614a8f88828901614959565b969995985093965092949392505050565b5f805f60608486031215614ab2575f80fd5b8335614abd81614a1c565b92506020840135614acd81614a1c565b929592945050506040919091013590565b5f805f805f60808688031215614af2575f80fd5b8535614afd81614a1c565b94506020860135614b0d81614a1c565b935060408601359250606086013567ffffffffffffffff80821115614b30575f80fd5b818801915088601f830112614b43575f80fd5b813581811115614b51575f80fd5b896020828501011115614b62575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b85575f80fd5b813561040181614a1c565b5f60c08284031215614ba0575f80fd5b50919050565b5f60208284031215614bb6575f80fd5b813567ffffffffffffffff811115614bcc575f80fd5b61055a84828501614b90565b5f805f60408486031215614bea575f80fd5b833567ffffffffffffffff80821115614c01575f80fd5b614c0d87838801614b90565b945060208601359150808211156149eb575f80fd5b5f60208284031215614c32575f80fd5b813567ffffffffffffffff811115614c48575f80fd5b820160808185031215610401575f80fd5b5f8060208385031215614c6a575f80fd5b823567ffffffffffffffff811115614c80575f80fd5b614c8c85828601614959565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1b57603f19888603018452614d09858351614c98565b94509285019290850190600101614ced565b5092979650505050505050565b5f8060408385031215614d39575f80fd5b8235614d4481614a1c565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405160a0810167ffffffffffffffff81118282101715614d8957614d89614d52565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dfe57614dfe614d52565b604052919050565b5f82601f830112614e15575f80fd5b813567ffffffffffffffff811115614e2f57614e2f614d52565b614e42601f8201601f1916602001614dd5565b818152846020838601011115614e56575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e82575f80fd5b614e8a614d66565b90508135614e9781614a1c565b81526020820135614ea781614a1c565b6020820152604082013567ffffffffffffffff811115614ec5575f80fd5b614ed184828501614e06565b60408301525092915050565b5f67ffffffffffffffff821115614ef657614ef6614d52565b5060051b60200190565b5f60408284031215614f10575f80fd5b614f18614d8f565b90508135614f2581614a1c565b808252506020820135602082015292915050565b5f82601f830112614f48575f80fd5b81356020614f5d614f5883614edd565b614dd5565b8083825260208201915060208460061b870101935086841115614f7e575f80fd5b602086015b84811015614fa357614f958882614f00565b835291830191604001614f83565b509695505050505050565b5f60a08284031215614fbe575f80fd5b614fc6614db2565b9050614fd182614a30565b8152602082013567ffffffffffffffff80821115614fed575f80fd5b614ff985838601614e72565b60208401526040840135915080821115615011575f80fd5b61501d85838601614f39565b60408401526060840135915080821115615035575f80fd5b5061504284828501614f39565b6060830152506080820135608082015292915050565b5f615065614f5884614edd565b8381529050602080820190600585811b850187811115615083575f80fd5b855b8181101561517057803567ffffffffffffffff808211156150a4575f80fd5b908801906060828c0312156150b7575f80fd5b6150bf614d66565b82356150ca81614a1c565b815282870135828111156150dc575f80fd5b8301601f81018d136150ec575f80fd5b80356150fa614f5882614edd565b81815290881b8201890190898101908f831115615115575f80fd5b928a01925b828410156151335783358252928a0192908a019061511a565b848b0152506040915050838101358381111561514d575f80fd5b6151598e828701614e06565b918301919091525087525050938301938301615085565b50505050509392505050565b5f82601f83011261518b575f80fd5b61040183833560208501615058565b5f805f805f61014086880312156151af575f80fd5b853567ffffffffffffffff808211156151c6575f80fd5b6151d289838a01614fae565b965060208801359150808211156151e7575f80fd5b6151f389838a01614fae565b95506152028960408a01614b90565b9450610100880135915080821115615218575f80fd5b61522489838a0161517c565b935061012088013591508082111561523a575f80fd5b506152478882890161517c565b9150509295509295909350565b5f6102b43683614fae565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561529381614a1c565b6001600160a01b0390811684526020830135906152af82614a1c565b166020840152604082013536839003601e190181126152cc575f80fd5b820160208101903567ffffffffffffffff8111156152e8575f80fd5b8036038213156152f6575f80fd5b6060604086015261530b60608601828461525f565b95945050505050565b5f808335601e19843603018112615329575f80fd5b830160208101925035905067ffffffffffffffff811115615348575f80fd5b8060061b36038213156134bd575f80fd5b8183525f60208085019450825f5b8581101561539f57813561537a81614a1c565b6001600160a01b03168752818301358388015260409687019690910190600101615367565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153d081614a1c565b166060830152602083013536849003605e190181126153ed575f80fd5b60a060808401526154046101008401858301615287565b90506154136040850185615314565b605f19808685030160a087015261542b848385615359565b935061543a6060880188615314565b93509150808685030160c087015250615454838383615359565b92505050608084013560e084015280915050949350505050565b5f61547b614f5884614edd565b80848252602080830192508560051b850136811115615498575f80fd5b855b8181101561552257803567ffffffffffffffff808211156154b9575f80fd5b8189019150604082360312156154cd575f80fd5b6154d5614d8f565b8235828111156154e3575f80fd5b6154ef36828601614e72565b8252508583013582811115615502575f80fd5b61550e3682860161517c565b82880152508752505093820193820161549a565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261556660a08301848661525f565b98975050505050505050565b5f60208284031215615582575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615589565b5f808335601e198436030181126155c5575f80fd5b83018035915067ffffffffffffffff8211156155df575f80fd5b6020019150600581901b36038213156134bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e1983360301811261561e575f80fd5b9190910192915050565b5f8235609e1983360301811261561e575f80fd5b5f808335601e19843603018112615651575f80fd5b83018035915067ffffffffffffffff82111561566b575f80fd5b6020019150600681901b36038213156134bd575f80fd5b5f60808236031215615692575f80fd5b6040516080810167ffffffffffffffff82821081831117156156b6576156b6614d52565b8160405284359150808211156156ca575f80fd5b6156d636838701614fae565b8352602085013560208401526040850135604084015260608501359150808211156156ff575f80fd5b5061570c3682860161517c565b60608301525092915050565b5f60208284031215615728575f80fd5b81358015158114610401575f80fd5b5f815180845260208085019450602084015f5b8381101561539f57815180516001600160a01b03168852830151838801526040909601959082019060010161574a565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157c7610100850182614c98565b9050604083015184820360408601526157e08282615737565b915050606083015184820360608601526157fa8282615737565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539f57815187529582019590820190600101615824565b5f6001600160a01b0380871683526020608081850152865160808086015261586c61010086018261577a565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b8281101561590857601f1988830301845284518a815116835289810151878b8501526158dc88850182615811565b91890151848303858b01529190506158f48183614c98565b968b0196958b0195935050506001016158ae565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e1984360301811261593f575f80fd5b83018035915067ffffffffffffffff821115615959575f80fd5b6020019150368190038213156134bd575f80fd5b5f8235605e1983360301811261561e575f80fd5b5f6102b43683614e72565b5f6040828403121561599c575f80fd5b6104018383614f00565b6001600160a01b0384168152826020820152606060408201525f61530b606083018461577a565b6001600160a01b0385168152836020820152606060408201525f6159f560608301848661525f565b9695505050505050565b5f610401368484615058565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a508184018761577a565b90508281036040840152615a64818661577a565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f610401602083018461577a565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0757601f19868403018952615af5838351615811565b98840198925090830190600101615ad9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b4d610100840182614c98565b9050606084015160808401526080840151601f19808584030160a0860152615b758383615abc565b925060a08601519150808584030160c0860152615b928383615811565b925060c08601519150808584030160e08601525061530b8282615811565b5f82601f830112615bbf575f80fd5b81516020615bcf614f5883614edd565b8083825260208201915060208460051b870101935086841115615bf0575f80fd5b602086015b84811015614fa35780518352918301918301615bf5565b5f8060408385031215615c1d575f80fd5b825167ffffffffffffffff80821115615c34575f80fd5b818501915085601f830112615c47575f80fd5b81516020615c57614f5883614edd565b82815260059290921b84018101918181019089841115615c75575f80fd5b948201945b83861015615c9357855182529482019490820190615c7a565b91880151919650909350505080821115615cab575f80fd5b50615cb885828601615bb0565b9150509250929050565b828152604060208201525f61055a6040830184615811565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d1a57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60018201615d3857615d38615589565b5060010190565b6001600160a01b0383168152604060208201525f61055a6040830184615abc565b602081525f6104016020830184614c98565b634e487b7160e01b5f52601260045260245ffd5b5f8060408385031215615d97575f80fd5b825160048110615da5575f80fd5b602084015190925060ff81168114615dbb575f80fd5b809150509250929050565b8082018281125f83128015821682158216171561146557611465615589565b600181815b80851115615e1f57815f1904821115615e0557615e05615589565b80851615615e1257918102915b93841c9390800290615dea565b509250929050565b5f82615e35575060016102b4565b81615e4157505f6102b4565b8160018114615e575760028114615e6157615e7d565b60019150506102b4565b60ff841115615e7257615e72615589565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615ea0575081810a6102b4565b615eaa8383615de5565b805f1904821115615ebd57615ebd615589565b029392505050565b5f6104018383615e27565b5f82615eea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600160ff1b820161426c5761426c61558956fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", "linkReferences": {} } } diff --git a/foundry.toml b/foundry.toml index 478e86b9d0..a2f49ea125 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,6 +1,6 @@ [package] name = "raindex" -version = "0.1.12" +version = "0.1.13" [profile.default] src = 'src' diff --git a/src/concrete/raindex/RaindexV6.sol b/src/concrete/raindex/RaindexV6.sol index cdc4d04dda..d64be9bce0 100644 --- a/src/concrete/raindex/RaindexV6.sol +++ b/src/concrete/raindex/RaindexV6.sol @@ -376,7 +376,14 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex emit MetaV1_2(order.owner, orderHash, orderConfig.meta); } - _doOrderPost(orderHash, post); + LibRaindex.doPost( + LibBytes32Matrix.matrixFrom( + LibBytes32Array.arrayFrom( + orderHash, bytes32(uint256(uint160(msg.sender))), bytes32(uint256(uint160(address(0)))) + ) + ), + post + ); } return stateChange; @@ -397,7 +404,14 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex sOrders[orderHash] = ORDER_DEAD; emit RemoveOrderV3(msg.sender, orderHash, order); - _doOrderPost(orderHash, post); + LibRaindex.doPost( + LibBytes32Matrix.matrixFrom( + LibBytes32Array.arrayFrom( + orderHash, bytes32(uint256(uint160(msg.sender))), bytes32(uint256(uint160(address(0)))) + ) + ), + post + ); } } diff --git a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol index 834f3f3e69..fecb4fb358 100644 --- a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x02b17ab238a36ebcedee19fa5a374d6122865be8fff61bf45ad15822c8482030); +bytes32 constant BYTECODE_HASH = bytes32(0xf5c1bdfa77ca124ef6598c94a207d431efbed2ab018231201e267b65ddc62ee5); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xE84c106B0A89A164d2D65205B9EBAE37c15Fd84a); +address constant DEPLOYED_ADDRESS = address(0xE85ee58EBC0e989aAe4fC11070c3507F50459D05); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b03831673f634958cd5f0583ad00a60ee6408638481954ed1146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol index 87e987a473..b11bf0ebeb 100644 --- a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol +++ b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d); +bytes32 constant BYTECODE_HASH = bytes32(0xb5a357e18838d2513e6a67c493adb9467b8bd5a90c22d6e6bbe0cbc218c3f948); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x032d9D94A79909F3b337ECFE6f73f4e86bA79c7E); +address constant DEPLOYED_ADDRESS = address(0xE85e902dB1eB3897f9D419B53cEB39D14644E621); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f337337fc0efec37d19f8a221aa4f8f7600c9ba2acd201461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f3373f634958cd5f0583ad00a60ee6408638481954ed11461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/RaindexV6.pointers.sol b/src/generated/RaindexV6.pointers.sol index 838901073a..f83a883207 100644 --- a/src/generated/RaindexV6.pointers.sol +++ b/src/generated/RaindexV6.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x6dccd7018126439bb9bceec4cd37f5bcfdd5319979fbf70f9faf41450da10b6f); +bytes32 constant BYTECODE_HASH = bytes32(0x0b448817be97eb10589c6c01724ff1af889d25f577368c2a11e0da3a02cc1200); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20); +address constant DEPLOYED_ADDRESS = address(0xF634958cD5F0583ad00a60eE6408638481954eD1); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f24806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614932565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461499a565b6102ba565b61010761013d366004614a05565b5f9081526020819052604090205460011490565b61016461015f366004614a3b565b610408565b005b610179610174366004614aa0565b61054e565b604051908152602001610113565b610107610195366004614ade565b610562565b6101646101a8366004614a3b565b610662565b6101796101bb366004614b75565b6107f5565b6101d36101ce366004614ba6565b61085d565b60408051928352602083019190915201610113565b6101076101f6366004614bd8565b610ff6565b61020e610209366004614c22565b6112c5565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c59565b611387565b6040516101139190614cc6565b610164610259366004614c59565b61146d565b61017961026c366004614d28565b6114c7565b61016461027f36600461519a565b611561565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a3a565b6102d06020850185614b75565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b75565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615254565b611a55565b5f818152602081905260409020549091505f19016103ea575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153aa565b60405180910390a160408051600381526020810183905233818301525f6060820152608081019091526103ea906103db905b60408051600181526020810192909252818101905290565b6103e5858761546e565b611a84565b5061040160015f80516020615f0483398151915255565b9392505050565b610410611a3a565b33858561041e838383611c52565b610428865f611c88565b61045d576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f8061046a338b8a611cc2565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f806104cd338d8d8d611d9c565b9092509050871561052a5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c0810190915261052a90610520906103c3565b6103e58a8c61546e565b5050505050505061054760015f80516020615f0483398151915255565b5050505050565b5f61055a848484611e8c565b949350505050565b5f6105776001600160a01b038616878661206e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105af9033908a908a9087908b908b9060040161552e565b6020604051808303815f875af11580156105cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ef9190615572565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461063457604051630b6c58a960e31b815260048101829052602401610316565b61065587306106435f8961559d565b6001600160a01b038a169291906120a3565b5060019695505050505050565b61066a611a3a565b338585610678838383611c52565b5f8080806106868a82611c88565b6106ba57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f6106c6338e8e611e8c565b90506106d28b826120df565b94506106e0338e8e886120fb565b90935091505f6106f1338f88612172565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610763969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107d6576107d6816103e58c8e61546e565b50505050505050505061054760015f80516020615f0483398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610839573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615572565b5f80610867611a3a565b61087460808401846155b0565b90505f0361089557604051639c95219f60e01b815260040160405180910390fd5b61089d61485a565b6108a5614886565b5f60405180606001604052808780608001906108c191906155b0565b5f8181106108d1576108d16155f6565b90506020028101906108e3919061560a565b6108ed9080615628565b6108fb90604081019061563c565b61090860808b018b6155b0565b5f818110610918576109186155f6565b905060200281019061092a919061560a565b6020013581811061093d5761093d6155f6565b6109539260206040909202019081019150614b75565b6001600160a01b0316815260200161096e60808901896155b0565b5f81811061097e5761097e6155f6565b9050602002810190610990919061560a565b61099a9080615628565b6109a890606081019061563c565b6109b560808b018b6155b0565b5f8181106109c5576109c56155f6565b90506020028101906109d7919061560a565b604001358181106109ea576109ea6155f6565b610a009260206040909202019081019150614b75565b6001600160a01b03168152602088810135910152905060605f610a2660808901896155b0565b604080516001909201602002820181528501519093505f9250610a4a915082611c88565b610a675760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a7660808a018a6155b0565b905081108015610a9057506040840151610a90905f611c88565b15610e9e57610aa260808a018a6155b0565b82818110610ab257610ab26155f6565b9050602002810190610ac4919061560a565b610acd90615682565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610afc57610afc6155f6565b60200260200101515f01516001600160a01b0316141580610b57575083602001516001600160a01b03168560600151876040015181518110610b4057610b406155f6565b60200260200101515f01516001600160a01b031614155b15610b755760405163936bb5ad60e01b815260040160405180910390fd5b610b888587602001518860400151612235565b5f610b9286611a55565b5f81815260208190526040902054909150610bf7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e95565b5f610c548789602001518a60400151338c606001515f67ffffffffffffffff811115610c2557610c25614d52565b604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b506122a7565b90505f610c728c604001358360600151611c8890919063ffffffff16565b15610cc8578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e87565b6040820151610cd7905f611c88565b1580610cef57506060820151610ced905f611c88565b155b15610d3c578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610cbb565b600190505f808d6060016020810190610d559190615718565b15610d9b576040808a015190850151610d6d916120df565b6060850151909250610d7f9083612839565b60408a0151909150610d919083612886565b60408a0152610e02565b5f610db78560400151866060015161283990919063ffffffff16565b9050610dd08a60400151826120df90919063ffffffff16565b9150610de98560600151836128b690919063ffffffff16565b60408b0151909350610dfb9083612886565b60408b0152505b610e0c8c826128e6565b9b50610e188d836128e6565b9c50610e248285612916565b610e2e81856129d7565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e639493929190615840565b60405180910390a187516001018089526020028801849052610e8484612b83565b50505b8480610e905750805b945050505b50600101610a69565b505f610eb060808a0160608b01615718565b610eba5786610ebc565b875b9050610ec9818a35612dc6565b15610ef15760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610f0133846020015189612172565b505f9050610f1260a08a018a61592a565b9050118015610f1e5750805b15610f905760208301518351339163691f9ed7918a8a610f4160a08f018f61592a565b6040518763ffffffff1660e01b8152600401610f629695949392919061552e565b5f604051808303815f87803b158015610f79575f80fd5b505af1158015610f8b573d5f803e3d5ffd5b505050505b610f9e33845f015188611cc2565b50505f5b8251811015610fd557610fcd838281518110610fc057610fc06155f6565b6020026020010151612e00565b600101610fa2565b505050505050610ff160015f80516020615f0483398151915255565b915091565b5f610fff611a3a565b61100c602085018561563c565b90505f0361102d57604051636c44ef8f60e01b815260040160405180910390fd5b61103a604085018561563c565b90505f0361105b5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f9060208101611079878061596d565b61108290615981565b8152602001868060200190611097919061563c565b808060200260200160405190810160405280939291908181526020015f905b828210156110e2576110d36040830286013681900381019061598c565b815260200190600101906110b6565b50505091835250506020016110fa604088018861563c565b808060200260200160405190810160405280939291908181526020015f905b82821015611145576111366040830286013681900381019061598c565b81526020019060010190611119565b50505050508152602001866060013581525090505f61116382611a55565b5f818152602081905260409020549091501580156112ab575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f916111c191859087906159a6565b60405180910390a15f6111d760a089018961592a565b90501115611273576112286111ef60a089018961592a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612f0a92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec369908361125a60a08b018b61592a565b60405161126a94939291906159cd565b60405180910390a15b60408051600381526020810184905233818301525f6060820152608081019091526112ab906112a1906103c3565b6103e5878961546e565b9250505061040160015f80516020615f0483398151915255565b5f8080806112df6112d68680615628565b61032c90615254565b5f8181526020819052604090205490915060011461130657505f9250829150819050611380565b61132b6113138680615628565b61131c90615254565b86602001358760400135612235565b5f6113696113398780615628565b61134290615254565b602088013560408901353361135a60608c018c6155b0565b611363916159ff565b5f610c25565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113b1576113b1614d52565b6040519080825280602002602001820160405280156113e457816020015b60608152602001906001900390816113cf5790505b5091505f5b838110156114655761144030868684818110611407576114076155f6565b9050602002810190611419919061592a565b8560405160200161142c93929190615a0b565b604051602081830303815290604052612f35565b838281518110611452576114526155f6565b60209081029190910101526001016113e9565b505092915050565b611475611a3a565b604080515f808252602082019092526114ad916114a2565b606081526020019060019003908161148d5790505b506103e5838561546e565b6114c360015f80516020615f0483398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f9190615572565b5f0361155957604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b611569611a3a565b835185516001600160a01b0391821691160361159857604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115b2576115b26155f6565b60200260200101515f01516001600160a01b031685606001518460200135815181106115e0576115e06155f6565b60200260200101515f01516001600160a01b03161415806116595750604085015180518435908110611614576116146155f6565b60200260200101515f01516001600160a01b03168460600151846060013581518110611642576116426155f6565b60200260200101515f01516001600160a01b031614155b156116775760405163936bb5ad60e01b815260040160405180910390fd5b8460600151836020013581518110611691576116916155f6565b60200260200101515f01516001600160a01b03168560400151845f0135815181106116be576116be6155f6565b60200260200101515f01516001600160a01b0316036116f057604051631cd2f1c760e21b815260040160405180910390fd5b5f805f6116fc88611a55565b81526020019081526020015f20540361176c577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333865f015161173e88611a55565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611a24565b5f805f61177887611a55565b81526020019081526020015f2054036117ba577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333855f015161173e87611a55565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e39338686866040516117ef9493929190615a2e565b60405180910390a183515f906118119087908635906020880135908686610c25565b90505f61184086866040013587606001358a5f0151885f67ffffffffffffffff811115610c2557610c25614d52565b90505f61184d8383612fd5565b905061185c815f015184612916565b61186a816020015183612916565b6118788160400151846129d7565b6118868160600151836129d7565b61188f83612e00565b61189882612e00565b606081015181515f916118ab9190612886565b90505f6118c98360400151846020015161288690919063ffffffff16565b90506118d5825f612dc6565b806118e557506118e5815f612dc6565b1561190357604051630d86822160e01b815260040160405180910390fd5b611937338b606001518a6020013581518110611921576119216155f6565b60200260200101515f01518a6080013585611d9c565b505061196d338a606001518a6060013581518110611957576119576155f6565b60200260200101515f01518a60a0013584611d9c565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a16119d683612b83565b6119df82612b83565b80516001600160e01b0316158015611a02575060208101516001600160e01b0316155b15611a20576040516321badf1f60e01b815260040160405180910390fd5b5050505b61054760015f80516020615f0483398151915255565b611a42613023565b60025f80516020615f0483398151915255565b5f81604051602001611a679190615aaa565b604051602081830303815290604052805190602001209050919050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611c4857868181518110611aeb57611aeb6155f6565b602002602001015193505f845f015160400151511115611c40575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611b638d8a60200151613054565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611b8e9190615b14565b5f60405180830381865afa158015611ba8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bcf9190810190615c0c565b9150505f81511115611c3e5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611c10908a908590600401615cc2565b5f604051808303815f87803b158015611c27575f80fd5b505af1158015611c39573d5f803e3d5ffd5b505050505b505b600101611ad0565b5050505050505050565b80611c83576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611cb684848484613336565b12979650505050505050565b5f805f80611ccf8661340a565b90925090506001826003811115611ce857611ce8615cda565b14158015611d0757505f826003811115611d0457611d04615cda565b14155b15611d2957858260405163ee07877f60e01b8152600401610316929190615cee565b611d33855f612dc6565b15611d5157604051632eaefac360e21b815260040160405180910390fd5b5f80611d5d8784613497565b9150915080611d7257611d6f82615d27565b91505b8115611d8d57611d8d6001600160a01b0389168a30856120a3565b5093509150505b935093915050565b5f80611da88382612dc6565b15611dc95760405163793a8f5560e01b815260048101849052602401610316565b83611de757611dd9868685612172565b505f9250829150611e839050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e2182866128e6565b9050611e2d815f612dc6565b15611e4e5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b5f8115611ec657506001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054610401565b5f80611ed1856134c4565b90925090506001826003811115611eea57611eea615cda565b14158015611f0957505f826003811115611f0657611f06615cda565b14155b15611f2b57848260405163ee07877f60e01b8152600401610316929190615cee565b6040516370a0823160e01b81526001600160a01b0387811660048301525f91611f9f918816906370a0823190602401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190615572565b83613523565b50604051636eb1769f60e11b81526001600160a01b0389811660048301523060248301529192505f9161201e919089169063dd62ed3e90604401602060405180830381865afa158015611ff4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120189190615572565b84613523565b506001600160a01b03808a165f908152600160209081526040808320938c168352928152828220828052905220549091506120639061205d84846120df565b906128e6565b945050505050610401565b61207b8383836001613563565b611c8357604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b18484848460016135c5565b6120d957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ea8383612dc6565b6120f45781610401565b5090919050565b5f806121078382612dc6565b156121285760405163793a8f5560e01b815260048101849052602401610316565b8361213857611dd9868685611cc2565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e218286612886565b5f805f8061217f8661340a565b9092509050600182600381111561219857612198615cda565b141580156121b757505f8260038111156121b4576121b4615cda565b14155b156121d957858260405163ee07877f60e01b8152600401610316929190615cee565b6121e3855f612dc6565b1561220157604051632d1671a360e11b815260040160405180910390fd5b5f61220c8683613497565b5090508015612229576122296001600160a01b038816898361206e565b97909650945050505050565b8260600151818151811061224b5761224b6155f6565b60200260200101515f01516001600160a01b031683604001518381518110612275576122756155f6565b60200260200101515f01516001600160a01b031603611c8357604051631cd2f1c760e21b815260040160405180910390fd5b6122af6148ed565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122ca57905050905061231f6122ed8a611a55565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b816001800381518110612334576123346155f6565b60200260200101819052505f8061236a8b604001518b8151811061235a5761235a6155f6565b60200260200101515f01516134c4565b9092509050600182600381111561238357612383615cda565b141580156123a257505f82600381111561239f5761239f615cda565b14155b156123e4578a604001518a815181106123bd576123bd6155f6565b60200260200101515f01518260405163ee07877f60e01b8152600401610316929190615cee565b5f6124348c5f01518d604001518d81518110612402576124026155f6565b60200260200101515f01518e604001518e81518110612423576124236155f6565b602002602001015160200151611e8c565b90506124c38c604001518c8151811061244f5761244f6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e604001518e81518110612481576124816155f6565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b846001600303815181106124d9576124d96155f6565b60200260200101819052505050505f806125028b606001518a8151811061235a5761235a6155f6565b9092509050600182600381111561251b5761251b615cda565b1415801561253a57505f82600381111561253757612537615cda565b14155b15612555578a6060015189815181106123bd576123bd6155f6565b5f6125948c5f01518d606001518c81518110612573576125736155f6565b60200260200101515f01518e606001518d81518110612423576124236155f6565b90506125e18c606001518b815181106125af576125af6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e606001518d81518110612481576124816155f6565b846001600403815181106125f7576125f76155f6565b602002602001018190525050505061260f8186613054565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161266f87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156126a7576126a7614d52565b6040519080825280602002602001820160405280156126d0578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016126f69190615b14565b5f60405180830381865afa158015612710573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127379190810190615c0c565b91509150600282511015612763578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516127b79087906004908110612786576127866155f6565b60200260200101516003815181106127a0576127a06155f6565b6020026020010151826120df90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106127e9576127e96155f6565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613632565b915091505f6128788383613751565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806128698686868661379e565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612869868686866137c8565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613d05565b81816080015160048151811061292e5761292e6155f6565b6020026020010151600481518110612948576129486155f6565b6020026020010181815250506120d9815f01515f01518260800151600481518110612975576129756155f6565b60200260200101515f8151811061298e5761298e6155f6565b60200260200101515f1c83608001516004815181106129af576129af6155f6565b60200260200101516002815181106129c9576129c96155f6565b6020026020010151856120fb565b8181608001516003815181106129ef576129ef6155f6565b6020026020010151600481518110612a0957612a096155f6565b6020908102919091010152805151608082015180515f91906003908110612a3257612a326155f6565b60200260200101515f81518110612a4b57612a4b6155f6565b60200260200101515f1c90505f8360800151600381518110612a6f57612a6f6155f6565b6020026020010151600281518110612a8957612a896155f6565b602002602001015190505f801b8103612b3057612aa6855f612dc6565b15612ac75760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054612afe90866128e6565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612b3f565b612b3c83838388611d9c565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612b74929190615d3f565b60405180910390a15050505050565b60c08101515115612bfd578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612bcf929091600401615cc2565b5f604051808303815f87803b158015612be6575f80fd5b505af1158015612bf8573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612c538660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612c9357612c93614d52565b604051908082528060200260200182016040528015612cbc578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612cec578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612d0c9190615b14565b5f60405180830381865afa158015612d26573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d4d9190810190615c0c565b9150505f815111156114c3578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612d95918590600401615cc2565b5f604051808303815f87803b158015612dac575f80fd5b505af1158015612dbe573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612df484848484613336565b13979650505050505050565b5f8160800151600381518110612e1857612e186155f6565b6020026020010151600281518110612e3257612e326155f6565b602002602001015190505f801b81036114c357815151608083015180515f91906003908110612e6357612e636155f6565b60200260200101515f81518110612e7c57612e7c6155f6565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b03811615610547576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612f01838383612172565b50505050505050565b612f1381613e03565b612f325780604051630c89984b60e31b81526004016103169190615d60565b50565b60605f612f428484613e31565b9050808015612f6357505f3d1180612f6357505f846001600160a01b03163b115b15612f7857612f70613e44565b9150506102b4565b8015612fa257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612fb557612fb0613e5d565b612fce565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f8082526020820181905291810182905260608101919091526130028383613e68565b825260408201526130138284613e68565b6020830152606082015292915050565b5f80516020615f048339815191525460020361305257604051633ee5aeb560e01b815260040160405180910390fd5b565b60605f825167ffffffffffffffff81111561307157613071614d52565b60405190808252806020026020018201604052801561309a578160200160208202803683370190505b5090505f808451116130ac575f6130b2565b83516001015b85516001010190505f8167ffffffffffffffff8111156130d4576130d4614d52565b60405190808252806020026020018201604052801561310757816020015b60608152602001906001900390816130f25790505b5090505f61312b604080516002815233602082015230818301526060810190915290565b82828151811061313d5761313d6155f6565b60200260200101819052505f5b875181101561319a57818060010192505087818151811061316d5761316d6155f6565b6020026020010151838381518110613187576131876155f6565b602090810291909101015260010161314a565b5085511561332c578080600101915050838282815181106131bd576131bd6155f6565b60200260200101819052505f5b865181101561332a576132798782815181106131e8576131e86155f6565b60200260200101515f01516132566132248a858151811061320b5761320b6155f6565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613268576132686155f6565b602002602001015160400151613ed1565b61329957604051630a57f30960e31b815260048101829052602401610316565b8681815181106132ab576132ab6155f6565b60200260200101515f01516001600160a01b03165f1b8582815181106132d3576132d36155f6565b60200260200101818152505081806001019250508681815181106132f9576132f96155f6565b602002602001015160200151838381518110613317576133176155f6565b60209081029190910101526001016131ca565b505b5095945050505050565b5f808515841517818712828612181785841417801561335b5786859250925050611e83565b505f8584131561336f575092949193919260015b8386035f8112604c82131780156133a2578215613394575f8994509450505050611e83565b885f94509450505050611e83565b600a82900a8981028a8282816133ba576133ba615d72565b05146133e65784156133d6575f8b965096505050505050611e83565b8a5f965096505050505050611e83565b84156133fb578896509450611e839350505050565b9550879450611e839350505050565b5f80613414613f41565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af115801561346a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061348e9190615d86565b91509150915091565b5f806001600160e01b038416601b0b60e085901d6134b6828287613fcc565b9350935050505b9250929050565b5f806134ce613f41565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa15801561346a573d5f803e3d5ffd5b5f805f805f6135328787614132565b9250925092505f806135448585614175565b91509150818380156135535750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166135b95783831516156135ad573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316613621578383151615613615573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f808515841517801561364a575f92505f9150613747565b6136548487615dc6565b91505f6136608861424d565b90505f61366c8761424d565b90505f613679838361427b565b5090505f6f0785ee10d5da46d900f436a0000000008211156136ae576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156136cf57670de0b6b3a7640000820491506012015b633b9aca008211156136e857633b9aca00820491506009015b6127108211156136fd57612710820491506004015b811561371157600a820491506001016136fd565b61371b8187615dc6565b955061373d8b8a613737878761373287600a615ec5565b614297565b89614363565b9097509550505050505b5094509492505050565b5f805f61375e8585614175565b915091508015801561376e575081155b1561379657604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806137aa8484614403565b90945092506137bb86868686613d05565b9150915094509492505050565b5f80835f036137f457604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361380557505f905080611e83565b5f805f806138138a8a614458565b919b50995091506138248888614458565b919950975090505f6138358b61424d565b90505f6138418a61424d565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613c0657841561389857507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613bde565b6f4b3b4ca85a86c47a098a2240000000008310156139c457678ac7230489e80000831015613928576402540be4008310156138f657620186a08310156138e65750620186a090506005613b9f565b506402540be4009050600a613b9f565b655af3107a40008310156139155750655af3107a40009050600e613b9f565b50678ac7230489e8000090506013613b9f565b6b204fce5e3e2502611000000083101561397a5769152d02c7e14af6800000831015613963575069152d02c7e14af680000090506017613b9f565b506b204fce5e3e250261100000009050601c613b9f565b6d314dc6448d9338c15b0a000000008310156139a957506d314dc6448d9338c15b0a0000000090506021613b9f565b506f4b3b4ca85a86c47a098a22400000000090506026613b9f565b780197d4df19d605767337e9f14d3eec8920e400000000000000831015613abc5773af298d050e4395d69670b12b7f41000000000000831015613a57577172cb5bd86321e38cb6ce6682e80000000000831015613a3857507172cb5bd86321e38cb6ce6682e800000000009050602b613b9f565b5073af298d050e4395d69670b12b7f4100000000000090506030613b9f565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613a98575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613b9f565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613b9f565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613b52577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613b2a57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613b9f565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613b9f565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613b9f57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613bb457600a820491505f1901613b9f565b815f03613bde576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613c06576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613c1d57808d039c50613c5b565b600160ff1b9c90038c015f811315613c5b57806001600160ff1b03038b13613c4857998a0199613c5b565b5f80995099505050505050505050611e83565b5f808e128015613c6a57505f8c135b15613c8b57600160ff1b8e01808d13613c83575f613c87565b808d035b9150505b8b818f01039750613ca88f8e613ca2888789614297565b8b614363565b90995097505f811315613cf257604c811315613cd2575f809a509a50505050505050505050611e83565b80600a0a8981613ce457613ce4615d72565b059850885f03613cf2575f97505b50969850949650611e8395505050505050565b5f8085158415178015613d3157865f03613d255784849250925050611e83565b86869250925050611e83565b613d3b87876146b2565b9097509550613d4a85856146b2565b909550935085841315613d5e579395929492935b838603604c811115613d77578787935093505050611e83565b80600a0a8681613d8957613d89615d72565b0595505086850180881860ff90811c151589881890911c15168015613df257876001600160ff1b0303613dd95760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613df6565b8198505b5096979596505050505050565b5f600882511015613e1557505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613e858460600151856040015161283990919063ffffffff16565b915083604001519050613ea5836040015183611c8890919063ffffffff16565b156134bd5782604001519150613ec88460600151836128b690919063ffffffff16565b90509250929050565b5f836001600160a01b03163b5f03613f2f575f80613eef85856146fb565b5090925090505f816003811115613f0857613f08615cda565b148015613f265750856001600160a01b0316826001600160a01b0316145b92505050610401565b613f3a848484614741565b9050610401565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580613f98575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15613052576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f851215613ff957604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f0361400b57505f90506001611d94565b8460ff841685018581121561403d5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f83121561408957604c19831215614060575f809550955050505050611d94565b825f03600a0a915081848161407757614077615d72565b0495505084029091149150611d949050565b5f83131561412257604d8313156140c65760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f19816140dc576140dc615d72565b048411156141105760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611d949050565b8360019550955050505050611d94565b5f808060ff841681036001600160ff1b0386111561416457600a860460018201600a88065f149350935093505061416e565b8593509150600190505b9250925092565b5f601b83900b83148383826141d9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156141b957620186a0860595506005850194505b8586601b0b146141d457600a860595508460010194506141b9565b6141ef565b855f036141ef57505f9250600191506134bd9050565b848560030b14614232575f85121561420f57505f92508291506134bd9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561427257600160ff1b820361426c5750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6142a4868661427b565b91509150815f036142c8578381816142be576142be615d72565b0492505050610401565b8382106142f95760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156143df576001600160ff1b038411156143cc576143906001600160ff1b03600161559d565b84036143a45750600160ff1b905081611e83565b6143af600a85615ed0565b6143b890615eef565b6143c3846001615dc6565b91509150611e83565b6143d584615eef565b8391509150611e83565b6001600160ff1b038411156143f9576143b8600a85615ed0565b5082905081611e83565b5f80600160ff1b840361444e576001600160ff1b0383036144415760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361447057505f9150819050600161416e565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f0361465d576f4b3b4ca85a86c47a098a22400000000085051580156144d257507f80000000000000000000000000000000000000000000000000000000000000268412155b156144f3576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561453b57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561455457678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156145a057507f800000000000000000000000000000000000000000000000000000000000000a8412155b156145b6576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561460557507f80000000000000000000000000000000000000000000000000000000000000028412155b1561461b576064850294506002840393506145b6565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561464b57506001600160ff1b018412155b1561465d57600a850294506001840393505b600a8086029081058614801561467a57506001600160ff1b018512155b15614689578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6146c18787614458565b925092509250806146ef576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b5f805f8351604103614732576020840151604085015160608601515f1a61472488828585614792565b95509550955050505061416e565b505081515f915060029061416e565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147cb57505f91506003905082614850565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561481c573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661484757505f925060019150829050614850565b92505f91508190505b9450945094915050565b604051806080016040528061486d614886565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148d460405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e00160405280614900614886565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614942575f80fd5b81356001600160e01b031981168114610401575f80fd5b5f8083601f840112614969575f80fd5b50813567ffffffffffffffff811115614980575f80fd5b6020830191508360208260051b85010111156134bd575f80fd5b5f805f604084860312156149ac575f80fd5b833567ffffffffffffffff808211156149c3575f80fd5b9085019060a082880312156149d6575f80fd5b909350602085013590808211156149eb575f80fd5b506149f886828701614959565b9497909650939450505050565b5f60208284031215614a15575f80fd5b5035919050565b6001600160a01b0381168114612f32575f80fd5b803561427681614a1c565b5f805f805f60808688031215614a4f575f80fd5b8535614a5a81614a1c565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a83575f80fd5b614a8f88828901614959565b969995985093965092949392505050565b5f805f60608486031215614ab2575f80fd5b8335614abd81614a1c565b92506020840135614acd81614a1c565b929592945050506040919091013590565b5f805f805f60808688031215614af2575f80fd5b8535614afd81614a1c565b94506020860135614b0d81614a1c565b935060408601359250606086013567ffffffffffffffff80821115614b30575f80fd5b818801915088601f830112614b43575f80fd5b813581811115614b51575f80fd5b896020828501011115614b62575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b85575f80fd5b813561040181614a1c565b5f60c08284031215614ba0575f80fd5b50919050565b5f60208284031215614bb6575f80fd5b813567ffffffffffffffff811115614bcc575f80fd5b61055a84828501614b90565b5f805f60408486031215614bea575f80fd5b833567ffffffffffffffff80821115614c01575f80fd5b614c0d87838801614b90565b945060208601359150808211156149eb575f80fd5b5f60208284031215614c32575f80fd5b813567ffffffffffffffff811115614c48575f80fd5b820160808185031215610401575f80fd5b5f8060208385031215614c6a575f80fd5b823567ffffffffffffffff811115614c80575f80fd5b614c8c85828601614959565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1b57603f19888603018452614d09858351614c98565b94509285019290850190600101614ced565b5092979650505050505050565b5f8060408385031215614d39575f80fd5b8235614d4481614a1c565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405160a0810167ffffffffffffffff81118282101715614d8957614d89614d52565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dfe57614dfe614d52565b604052919050565b5f82601f830112614e15575f80fd5b813567ffffffffffffffff811115614e2f57614e2f614d52565b614e42601f8201601f1916602001614dd5565b818152846020838601011115614e56575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e82575f80fd5b614e8a614d66565b90508135614e9781614a1c565b81526020820135614ea781614a1c565b6020820152604082013567ffffffffffffffff811115614ec5575f80fd5b614ed184828501614e06565b60408301525092915050565b5f67ffffffffffffffff821115614ef657614ef6614d52565b5060051b60200190565b5f60408284031215614f10575f80fd5b614f18614d8f565b90508135614f2581614a1c565b808252506020820135602082015292915050565b5f82601f830112614f48575f80fd5b81356020614f5d614f5883614edd565b614dd5565b8083825260208201915060208460061b870101935086841115614f7e575f80fd5b602086015b84811015614fa357614f958882614f00565b835291830191604001614f83565b509695505050505050565b5f60a08284031215614fbe575f80fd5b614fc6614db2565b9050614fd182614a30565b8152602082013567ffffffffffffffff80821115614fed575f80fd5b614ff985838601614e72565b60208401526040840135915080821115615011575f80fd5b61501d85838601614f39565b60408401526060840135915080821115615035575f80fd5b5061504284828501614f39565b6060830152506080820135608082015292915050565b5f615065614f5884614edd565b8381529050602080820190600585811b850187811115615083575f80fd5b855b8181101561517057803567ffffffffffffffff808211156150a4575f80fd5b908801906060828c0312156150b7575f80fd5b6150bf614d66565b82356150ca81614a1c565b815282870135828111156150dc575f80fd5b8301601f81018d136150ec575f80fd5b80356150fa614f5882614edd565b81815290881b8201890190898101908f831115615115575f80fd5b928a01925b828410156151335783358252928a0192908a019061511a565b848b0152506040915050838101358381111561514d575f80fd5b6151598e828701614e06565b918301919091525087525050938301938301615085565b50505050509392505050565b5f82601f83011261518b575f80fd5b61040183833560208501615058565b5f805f805f61014086880312156151af575f80fd5b853567ffffffffffffffff808211156151c6575f80fd5b6151d289838a01614fae565b965060208801359150808211156151e7575f80fd5b6151f389838a01614fae565b95506152028960408a01614b90565b9450610100880135915080821115615218575f80fd5b61522489838a0161517c565b935061012088013591508082111561523a575f80fd5b506152478882890161517c565b9150509295509295909350565b5f6102b43683614fae565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561529381614a1c565b6001600160a01b0390811684526020830135906152af82614a1c565b166020840152604082013536839003601e190181126152cc575f80fd5b820160208101903567ffffffffffffffff8111156152e8575f80fd5b8036038213156152f6575f80fd5b6060604086015261530b60608601828461525f565b95945050505050565b5f808335601e19843603018112615329575f80fd5b830160208101925035905067ffffffffffffffff811115615348575f80fd5b8060061b36038213156134bd575f80fd5b8183525f60208085019450825f5b8581101561539f57813561537a81614a1c565b6001600160a01b03168752818301358388015260409687019690910190600101615367565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153d081614a1c565b166060830152602083013536849003605e190181126153ed575f80fd5b60a060808401526154046101008401858301615287565b90506154136040850185615314565b605f19808685030160a087015261542b848385615359565b935061543a6060880188615314565b93509150808685030160c087015250615454838383615359565b92505050608084013560e084015280915050949350505050565b5f61547b614f5884614edd565b80848252602080830192508560051b850136811115615498575f80fd5b855b8181101561552257803567ffffffffffffffff808211156154b9575f80fd5b8189019150604082360312156154cd575f80fd5b6154d5614d8f565b8235828111156154e3575f80fd5b6154ef36828601614e72565b8252508583013582811115615502575f80fd5b61550e3682860161517c565b82880152508752505093820193820161549a565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261556660a08301848661525f565b98975050505050505050565b5f60208284031215615582575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615589565b5f808335601e198436030181126155c5575f80fd5b83018035915067ffffffffffffffff8211156155df575f80fd5b6020019150600581901b36038213156134bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e1983360301811261561e575f80fd5b9190910192915050565b5f8235609e1983360301811261561e575f80fd5b5f808335601e19843603018112615651575f80fd5b83018035915067ffffffffffffffff82111561566b575f80fd5b6020019150600681901b36038213156134bd575f80fd5b5f60808236031215615692575f80fd5b6040516080810167ffffffffffffffff82821081831117156156b6576156b6614d52565b8160405284359150808211156156ca575f80fd5b6156d636838701614fae565b8352602085013560208401526040850135604084015260608501359150808211156156ff575f80fd5b5061570c3682860161517c565b60608301525092915050565b5f60208284031215615728575f80fd5b81358015158114610401575f80fd5b5f815180845260208085019450602084015f5b8381101561539f57815180516001600160a01b03168852830151838801526040909601959082019060010161574a565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157c7610100850182614c98565b9050604083015184820360408601526157e08282615737565b915050606083015184820360608601526157fa8282615737565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539f57815187529582019590820190600101615824565b5f6001600160a01b0380871683526020608081850152865160808086015261586c61010086018261577a565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b8281101561590857601f1988830301845284518a815116835289810151878b8501526158dc88850182615811565b91890151848303858b01529190506158f48183614c98565b968b0196958b0195935050506001016158ae565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e1984360301811261593f575f80fd5b83018035915067ffffffffffffffff821115615959575f80fd5b6020019150368190038213156134bd575f80fd5b5f8235605e1983360301811261561e575f80fd5b5f6102b43683614e72565b5f6040828403121561599c575f80fd5b6104018383614f00565b6001600160a01b0384168152826020820152606060408201525f61530b606083018461577a565b6001600160a01b0385168152836020820152606060408201525f6159f560608301848661525f565b9695505050505050565b5f610401368484615058565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a508184018761577a565b90508281036040840152615a64818661577a565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f610401602083018461577a565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0757601f19868403018952615af5838351615811565b98840198925090830190600101615ad9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b4d610100840182614c98565b9050606084015160808401526080840151601f19808584030160a0860152615b758383615abc565b925060a08601519150808584030160c0860152615b928383615811565b925060c08601519150808584030160e08601525061530b8282615811565b5f82601f830112615bbf575f80fd5b81516020615bcf614f5883614edd565b8083825260208201915060208460051b870101935086841115615bf0575f80fd5b602086015b84811015614fa35780518352918301918301615bf5565b5f8060408385031215615c1d575f80fd5b825167ffffffffffffffff80821115615c34575f80fd5b818501915085601f830112615c47575f80fd5b81516020615c57614f5883614edd565b82815260059290921b84018101918181019089841115615c75575f80fd5b948201945b83861015615c9357855182529482019490820190615c7a565b91880151919650909350505080821115615cab575f80fd5b50615cb885828601615bb0565b9150509250929050565b828152604060208201525f61055a6040830184615811565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d1a57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60018201615d3857615d38615589565b5060010190565b6001600160a01b0383168152604060208201525f61055a6040830184615abc565b602081525f6104016020830184614c98565b634e487b7160e01b5f52601260045260245ffd5b5f8060408385031215615d97575f80fd5b825160048110615da5575f80fd5b602084015190925060ff81168114615dbb575f80fd5b809150509250929050565b8082018281125f83128015821682158216171561146557611465615589565b600181815b80851115615e1f57815f1904821115615e0557615e05615589565b80851615615e1257918102915b93841c9390800290615dea565b509250929050565b5f82615e35575060016102b4565b81615e4157505f6102b4565b8160018114615e575760028114615e6157615e7d565b60019150506102b4565b60ff841115615e7257615e72615589565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615ea0575081810a6102b4565b615eaa8383615de5565b805f1904821115615ebd57615ebd615589565b029392505050565b5f6104018383615e27565b5f82615eea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600160ff1b820161426c5761426c61558956fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614932565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461499a565b6102ba565b61010761013d366004614a05565b5f9081526020819052604090205460011490565b61016461015f366004614a3b565b610408565b005b610179610174366004614aa0565b61054e565b604051908152602001610113565b610107610195366004614ade565b610562565b6101646101a8366004614a3b565b610662565b6101796101bb366004614b75565b6107f5565b6101d36101ce366004614ba6565b61085d565b60408051928352602083019190915201610113565b6101076101f6366004614bd8565b610ff6565b61020e610209366004614c22565b6112c5565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c59565b611387565b6040516101139190614cc6565b610164610259366004614c59565b61146d565b61017961026c366004614d28565b6114c7565b61016461027f36600461519a565b611561565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a3a565b6102d06020850185614b75565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b75565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615254565b611a55565b5f818152602081905260409020549091505f19016103ea575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153aa565b60405180910390a160408051600381526020810183905233818301525f6060820152608081019091526103ea906103db905b60408051600181526020810192909252818101905290565b6103e5858761546e565b611a84565b5061040160015f80516020615f0483398151915255565b9392505050565b610410611a3a565b33858561041e838383611c52565b610428865f611c88565b61045d576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f8061046a338b8a611cc2565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f806104cd338d8d8d611d9c565b9092509050871561052a5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c0810190915261052a90610520906103c3565b6103e58a8c61546e565b5050505050505061054760015f80516020615f0483398151915255565b5050505050565b5f61055a848484611e8c565b949350505050565b5f6105776001600160a01b038616878661206e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105af9033908a908a9087908b908b9060040161552e565b6020604051808303815f875af11580156105cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ef9190615572565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461063457604051630b6c58a960e31b815260048101829052602401610316565b61065587306106435f8961559d565b6001600160a01b038a169291906120a3565b5060019695505050505050565b61066a611a3a565b338585610678838383611c52565b5f8080806106868a82611c88565b6106ba57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f6106c6338e8e611e8c565b90506106d28b826120df565b94506106e0338e8e886120fb565b90935091505f6106f1338f88612172565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610763969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107d6576107d6816103e58c8e61546e565b50505050505050505061054760015f80516020615f0483398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610839573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615572565b5f80610867611a3a565b61087460808401846155b0565b90505f0361089557604051639c95219f60e01b815260040160405180910390fd5b61089d61485a565b6108a5614886565b5f60405180606001604052808780608001906108c191906155b0565b5f8181106108d1576108d16155f6565b90506020028101906108e3919061560a565b6108ed9080615628565b6108fb90604081019061563c565b61090860808b018b6155b0565b5f818110610918576109186155f6565b905060200281019061092a919061560a565b6020013581811061093d5761093d6155f6565b6109539260206040909202019081019150614b75565b6001600160a01b0316815260200161096e60808901896155b0565b5f81811061097e5761097e6155f6565b9050602002810190610990919061560a565b61099a9080615628565b6109a890606081019061563c565b6109b560808b018b6155b0565b5f8181106109c5576109c56155f6565b90506020028101906109d7919061560a565b604001358181106109ea576109ea6155f6565b610a009260206040909202019081019150614b75565b6001600160a01b03168152602088810135910152905060605f610a2660808901896155b0565b604080516001909201602002820181528501519093505f9250610a4a915082611c88565b610a675760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a7660808a018a6155b0565b905081108015610a9057506040840151610a90905f611c88565b15610e9e57610aa260808a018a6155b0565b82818110610ab257610ab26155f6565b9050602002810190610ac4919061560a565b610acd90615682565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610afc57610afc6155f6565b60200260200101515f01516001600160a01b0316141580610b57575083602001516001600160a01b03168560600151876040015181518110610b4057610b406155f6565b60200260200101515f01516001600160a01b031614155b15610b755760405163936bb5ad60e01b815260040160405180910390fd5b610b888587602001518860400151612235565b5f610b9286611a55565b5f81815260208190526040902054909150610bf7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e95565b5f610c548789602001518a60400151338c606001515f67ffffffffffffffff811115610c2557610c25614d52565b604051908082528060200260200182016040528015610c4e578160200160208202803683370190505b506122a7565b90505f610c728c604001358360600151611c8890919063ffffffff16565b15610cc8578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e87565b6040820151610cd7905f611c88565b1580610cef57506060820151610ced905f611c88565b155b15610d3c578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610cbb565b600190505f808d6060016020810190610d559190615718565b15610d9b576040808a015190850151610d6d916120df565b6060850151909250610d7f9083612839565b60408a0151909150610d919083612886565b60408a0152610e02565b5f610db78560400151866060015161283990919063ffffffff16565b9050610dd08a60400151826120df90919063ffffffff16565b9150610de98560600151836128b690919063ffffffff16565b60408b0151909350610dfb9083612886565b60408b0152505b610e0c8c826128e6565b9b50610e188d836128e6565b9c50610e248285612916565b610e2e81856129d7565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e639493929190615840565b60405180910390a187516001018089526020028801849052610e8484612b83565b50505b8480610e905750805b945050505b50600101610a69565b505f610eb060808a0160608b01615718565b610eba5786610ebc565b875b9050610ec9818a35612dc6565b15610ef15760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610f0133846020015189612172565b505f9050610f1260a08a018a61592a565b9050118015610f1e5750805b15610f905760208301518351339163691f9ed7918a8a610f4160a08f018f61592a565b6040518763ffffffff1660e01b8152600401610f629695949392919061552e565b5f604051808303815f87803b158015610f79575f80fd5b505af1158015610f8b573d5f803e3d5ffd5b505050505b610f9e33845f015188611cc2565b50505f5b8251811015610fd557610fcd838281518110610fc057610fc06155f6565b6020026020010151612e00565b600101610fa2565b505050505050610ff160015f80516020615f0483398151915255565b915091565b5f610fff611a3a565b61100c602085018561563c565b90505f0361102d57604051636c44ef8f60e01b815260040160405180910390fd5b61103a604085018561563c565b90505f0361105b5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f9060208101611079878061596d565b61108290615981565b8152602001868060200190611097919061563c565b808060200260200160405190810160405280939291908181526020015f905b828210156110e2576110d36040830286013681900381019061598c565b815260200190600101906110b6565b50505091835250506020016110fa604088018861563c565b808060200260200160405190810160405280939291908181526020015f905b82821015611145576111366040830286013681900381019061598c565b81526020019060010190611119565b50505050508152602001866060013581525090505f61116382611a55565b5f818152602081905260409020549091501580156112ab575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f916111c191859087906159a6565b60405180910390a15f6111d760a089018961592a565b90501115611273576112286111ef60a089018961592a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612f0a92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec369908361125a60a08b018b61592a565b60405161126a94939291906159cd565b60405180910390a15b60408051600381526020810184905233818301525f6060820152608081019091526112ab906112a1906103c3565b6103e5878961546e565b9250505061040160015f80516020615f0483398151915255565b5f8080806112df6112d68680615628565b61032c90615254565b5f8181526020819052604090205490915060011461130657505f9250829150819050611380565b61132b6113138680615628565b61131c90615254565b86602001358760400135612235565b5f6113696113398780615628565b61134290615254565b602088013560408901353361135a60608c018c6155b0565b611363916159ff565b5f610c25565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113b1576113b1614d52565b6040519080825280602002602001820160405280156113e457816020015b60608152602001906001900390816113cf5790505b5091505f5b838110156114655761144030868684818110611407576114076155f6565b9050602002810190611419919061592a565b8560405160200161142c93929190615a0b565b604051602081830303815290604052612f35565b838281518110611452576114526155f6565b60209081029190910101526001016113e9565b505092915050565b611475611a3a565b604080515f808252602082019092526114ad916114a2565b606081526020019060019003908161148d5790505b506103e5838561546e565b6114c360015f80516020615f0483398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f9190615572565b5f0361155957604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b611569611a3a565b835185516001600160a01b0391821691160361159857604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115b2576115b26155f6565b60200260200101515f01516001600160a01b031685606001518460200135815181106115e0576115e06155f6565b60200260200101515f01516001600160a01b03161415806116595750604085015180518435908110611614576116146155f6565b60200260200101515f01516001600160a01b03168460600151846060013581518110611642576116426155f6565b60200260200101515f01516001600160a01b031614155b156116775760405163936bb5ad60e01b815260040160405180910390fd5b8460600151836020013581518110611691576116916155f6565b60200260200101515f01516001600160a01b03168560400151845f0135815181106116be576116be6155f6565b60200260200101515f01516001600160a01b0316036116f057604051631cd2f1c760e21b815260040160405180910390fd5b5f805f6116fc88611a55565b81526020019081526020015f20540361176c577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333865f015161173e88611a55565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a1611a24565b5f805f61177887611a55565b81526020019081526020015f2054036117ba577fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f333855f015161173e87611a55565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e39338686866040516117ef9493929190615a2e565b60405180910390a183515f906118119087908635906020880135908686610c25565b90505f61184086866040013587606001358a5f0151885f67ffffffffffffffff811115610c2557610c25614d52565b90505f61184d8383612fd5565b905061185c815f015184612916565b61186a816020015183612916565b6118788160400151846129d7565b6118868160600151836129d7565b61188f83612e00565b61189882612e00565b606081015181515f916118ab9190612886565b90505f6118c98360400151846020015161288690919063ffffffff16565b90506118d5825f612dc6565b806118e557506118e5815f612dc6565b1561190357604051630d86822160e01b815260040160405180910390fd5b611937338b606001518a6020013581518110611921576119216155f6565b60200260200101515f01518a6080013585611d9c565b505061196d338a606001518a6060013581518110611957576119576155f6565b60200260200101515f01518a60a0013584611d9c565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a16119d683612b83565b6119df82612b83565b80516001600160e01b0316158015611a02575060208101516001600160e01b0316155b15611a20576040516321badf1f60e01b815260040160405180910390fd5b5050505b61054760015f80516020615f0483398151915255565b611a42613023565b60025f80516020615f0483398151915255565b5f81604051602001611a679190615aaa565b604051602081830303815290604052805190602001209050919050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611c4857868181518110611aeb57611aeb6155f6565b602002602001015193505f845f015160400151511115611c40575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611b638d8a60200151613054565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611b8e9190615b14565b5f60405180830381865afa158015611ba8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bcf9190810190615c0c565b9150505f81511115611c3e5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611c10908a908590600401615cc2565b5f604051808303815f87803b158015611c27575f80fd5b505af1158015611c39573d5f803e3d5ffd5b505050505b505b600101611ad0565b5050505050505050565b80611c83576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611cb684848484613336565b12979650505050505050565b5f805f80611ccf8661340a565b90925090506001826003811115611ce857611ce8615cda565b14158015611d0757505f826003811115611d0457611d04615cda565b14155b15611d2957858260405163ee07877f60e01b8152600401610316929190615cee565b611d33855f612dc6565b15611d5157604051632eaefac360e21b815260040160405180910390fd5b5f80611d5d8784613497565b9150915080611d7257611d6f82615d27565b91505b8115611d8d57611d8d6001600160a01b0389168a30856120a3565b5093509150505b935093915050565b5f80611da88382612dc6565b15611dc95760405163793a8f5560e01b815260048101849052602401610316565b83611de757611dd9868685612172565b505f9250829150611e839050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e2182866128e6565b9050611e2d815f612dc6565b15611e4e5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b5f8115611ec657506001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054610401565b5f80611ed1856134c4565b90925090506001826003811115611eea57611eea615cda565b14158015611f0957505f826003811115611f0657611f06615cda565b14155b15611f2b57848260405163ee07877f60e01b8152600401610316929190615cee565b6040516370a0823160e01b81526001600160a01b0387811660048301525f91611f9f918816906370a0823190602401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190615572565b83613523565b50604051636eb1769f60e11b81526001600160a01b0389811660048301523060248301529192505f9161201e919089169063dd62ed3e90604401602060405180830381865afa158015611ff4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120189190615572565b84613523565b506001600160a01b03808a165f908152600160209081526040808320938c168352928152828220828052905220549091506120639061205d84846120df565b906128e6565b945050505050610401565b61207b8383836001613563565b611c8357604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b18484848460016135c5565b6120d957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ea8383612dc6565b6120f45781610401565b5090919050565b5f806121078382612dc6565b156121285760405163793a8f5560e01b815260048101849052602401610316565b8361213857611dd9868685611cc2565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611e218286612886565b5f805f8061217f8661340a565b9092509050600182600381111561219857612198615cda565b141580156121b757505f8260038111156121b4576121b4615cda565b14155b156121d957858260405163ee07877f60e01b8152600401610316929190615cee565b6121e3855f612dc6565b1561220157604051632d1671a360e11b815260040160405180910390fd5b5f61220c8683613497565b5090508015612229576122296001600160a01b038816898361206e565b97909650945050505050565b8260600151818151811061224b5761224b6155f6565b60200260200101515f01516001600160a01b031683604001518381518110612275576122756155f6565b60200260200101515f01516001600160a01b031603611c8357604051631cd2f1c760e21b815260040160405180910390fd5b6122af6148ed565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122ca57905050905061231f6122ed8a611a55565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b816001800381518110612334576123346155f6565b60200260200101819052505f8061236a8b604001518b8151811061235a5761235a6155f6565b60200260200101515f01516134c4565b9092509050600182600381111561238357612383615cda565b141580156123a257505f82600381111561239f5761239f615cda565b14155b156123e4578a604001518a815181106123bd576123bd6155f6565b60200260200101515f01518260405163ee07877f60e01b8152600401610316929190615cee565b5f6124348c5f01518d604001518d81518110612402576124026155f6565b60200260200101515f01518e604001518e81518110612423576124236155f6565b602002602001015160200151611e8c565b90506124c38c604001518c8151811061244f5761244f6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e604001518e81518110612481576124816155f6565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b846001600303815181106124d9576124d96155f6565b60200260200101819052505050505f806125028b606001518a8151811061235a5761235a6155f6565b9092509050600182600381111561251b5761251b615cda565b1415801561253a57505f82600381111561253757612537615cda565b14155b15612555578a6060015189815181106123bd576123bd6155f6565b5f6125948c5f01518d606001518c81518110612573576125736155f6565b60200260200101515f01518e606001518d81518110612423576124236155f6565b90506125e18c606001518b815181106125af576125af6155f6565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8e606001518d81518110612481576124816155f6565b846001600403815181106125f7576125f76155f6565b602002602001018190525050505061260f8186613054565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161266f87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156126a7576126a7614d52565b6040519080825280602002602001820160405280156126d0578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016126f69190615b14565b5f60405180830381865afa158015612710573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127379190810190615c0c565b91509150600282511015612763578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516127b79087906004908110612786576127866155f6565b60200260200101516003815181106127a0576127a06155f6565b6020026020010151826120df90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106127e9576127e96155f6565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613632565b915091505f6128788383613751565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806128698686868661379e565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612869868686866137c8565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061286986868686613d05565b81816080015160048151811061292e5761292e6155f6565b6020026020010151600481518110612948576129486155f6565b6020026020010181815250506120d9815f01515f01518260800151600481518110612975576129756155f6565b60200260200101515f8151811061298e5761298e6155f6565b60200260200101515f1c83608001516004815181106129af576129af6155f6565b60200260200101516002815181106129c9576129c96155f6565b6020026020010151856120fb565b8181608001516003815181106129ef576129ef6155f6565b6020026020010151600481518110612a0957612a096155f6565b6020908102919091010152805151608082015180515f91906003908110612a3257612a326155f6565b60200260200101515f81518110612a4b57612a4b6155f6565b60200260200101515f1c90505f8360800151600381518110612a6f57612a6f6155f6565b6020026020010151600281518110612a8957612a896155f6565b602002602001015190505f801b8103612b3057612aa6855f612dc6565b15612ac75760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f908152600160209081526040808320938616835292815282822084835290522054612afe90866128e6565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612b3f565b612b3c83838388611d9c565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612b74929190615d3f565b60405180910390a15050505050565b60c08101515115612bfd578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612bcf929091600401615cc2565b5f604051808303815f87803b158015612be6575f80fd5b505af1158015612bf8573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612c538660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612c9357612c93614d52565b604051908082528060200260200182016040528015612cbc578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612cec578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612d0c9190615b14565b5f60405180830381865afa158015612d26573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d4d9190810190615c0c565b9150505f815111156114c3578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612d95918590600401615cc2565b5f604051808303815f87803b158015612dac575f80fd5b505af1158015612dbe573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612df484848484613336565b13979650505050505050565b5f8160800151600381518110612e1857612e186155f6565b6020026020010151600281518110612e3257612e326155f6565b602002602001015190505f801b81036114c357815151608083015180515f91906003908110612e6357612e636155f6565b60200260200101515f81518110612e7c57612e7c6155f6565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b03811615610547576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612f01838383612172565b50505050505050565b612f1381613e03565b612f325780604051630c89984b60e31b81526004016103169190615d60565b50565b60605f612f428484613e31565b9050808015612f6357505f3d1180612f6357505f846001600160a01b03163b115b15612f7857612f70613e44565b9150506102b4565b8015612fa257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612fb557612fb0613e5d565b612fce565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f8082526020820181905291810182905260608101919091526130028383613e68565b825260408201526130138284613e68565b6020830152606082015292915050565b5f80516020615f048339815191525460020361305257604051633ee5aeb560e01b815260040160405180910390fd5b565b60605f825167ffffffffffffffff81111561307157613071614d52565b60405190808252806020026020018201604052801561309a578160200160208202803683370190505b5090505f808451116130ac575f6130b2565b83516001015b85516001010190505f8167ffffffffffffffff8111156130d4576130d4614d52565b60405190808252806020026020018201604052801561310757816020015b60608152602001906001900390816130f25790505b5090505f61312b604080516002815233602082015230818301526060810190915290565b82828151811061313d5761313d6155f6565b60200260200101819052505f5b875181101561319a57818060010192505087818151811061316d5761316d6155f6565b6020026020010151838381518110613187576131876155f6565b602090810291909101015260010161314a565b5085511561332c578080600101915050838282815181106131bd576131bd6155f6565b60200260200101819052505f5b865181101561332a576132798782815181106131e8576131e86155f6565b60200260200101515f01516132566132248a858151811061320b5761320b6155f6565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613268576132686155f6565b602002602001015160400151613ed1565b61329957604051630a57f30960e31b815260048101829052602401610316565b8681815181106132ab576132ab6155f6565b60200260200101515f01516001600160a01b03165f1b8582815181106132d3576132d36155f6565b60200260200101818152505081806001019250508681815181106132f9576132f96155f6565b602002602001015160200151838381518110613317576133176155f6565b60209081029190910101526001016131ca565b505b5095945050505050565b5f808515841517818712828612181785841417801561335b5786859250925050611e83565b505f8584131561336f575092949193919260015b8386035f8112604c82131780156133a2578215613394575f8994509450505050611e83565b885f94509450505050611e83565b600a82900a8981028a8282816133ba576133ba615d72565b05146133e65784156133d6575f8b965096505050505050611e83565b8a5f965096505050505050611e83565b84156133fb578896509450611e839350505050565b9550879450611e839350505050565b5f80613414613f41565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af115801561346a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061348e9190615d86565b91509150915091565b5f806001600160e01b038416601b0b60e085901d6134b6828287613fcc565b9350935050505b9250929050565b5f806134ce613f41565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa15801561346a573d5f803e3d5ffd5b5f805f805f6135328787614132565b9250925092505f806135448585614175565b91509150818380156135535750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166135b95783831516156135ad573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316613621578383151615613615573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f808515841517801561364a575f92505f9150613747565b6136548487615dc6565b91505f6136608861424d565b90505f61366c8761424d565b90505f613679838361427b565b5090505f6f0785ee10d5da46d900f436a0000000008211156136ae576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156136cf57670de0b6b3a7640000820491506012015b633b9aca008211156136e857633b9aca00820491506009015b6127108211156136fd57612710820491506004015b811561371157600a820491506001016136fd565b61371b8187615dc6565b955061373d8b8a613737878761373287600a615ec5565b614297565b89614363565b9097509550505050505b5094509492505050565b5f805f61375e8585614175565b915091508015801561376e575081155b1561379657604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806137aa8484614403565b90945092506137bb86868686613d05565b9150915094509492505050565b5f80835f036137f457604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361380557505f905080611e83565b5f805f806138138a8a614458565b919b50995091506138248888614458565b919950975090505f6138358b61424d565b90505f6138418a61424d565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613c0657841561389857507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613bde565b6f4b3b4ca85a86c47a098a2240000000008310156139c457678ac7230489e80000831015613928576402540be4008310156138f657620186a08310156138e65750620186a090506005613b9f565b506402540be4009050600a613b9f565b655af3107a40008310156139155750655af3107a40009050600e613b9f565b50678ac7230489e8000090506013613b9f565b6b204fce5e3e2502611000000083101561397a5769152d02c7e14af6800000831015613963575069152d02c7e14af680000090506017613b9f565b506b204fce5e3e250261100000009050601c613b9f565b6d314dc6448d9338c15b0a000000008310156139a957506d314dc6448d9338c15b0a0000000090506021613b9f565b506f4b3b4ca85a86c47a098a22400000000090506026613b9f565b780197d4df19d605767337e9f14d3eec8920e400000000000000831015613abc5773af298d050e4395d69670b12b7f41000000000000831015613a57577172cb5bd86321e38cb6ce6682e80000000000831015613a3857507172cb5bd86321e38cb6ce6682e800000000009050602b613b9f565b5073af298d050e4395d69670b12b7f4100000000000090506030613b9f565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613a98575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613b9f565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613b9f565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613b52577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613b2a57507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613b9f565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613b9f565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613b9f57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613bb457600a820491505f1901613b9f565b815f03613bde576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613c06576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613c1d57808d039c50613c5b565b600160ff1b9c90038c015f811315613c5b57806001600160ff1b03038b13613c4857998a0199613c5b565b5f80995099505050505050505050611e83565b5f808e128015613c6a57505f8c135b15613c8b57600160ff1b8e01808d13613c83575f613c87565b808d035b9150505b8b818f01039750613ca88f8e613ca2888789614297565b8b614363565b90995097505f811315613cf257604c811315613cd2575f809a509a50505050505050505050611e83565b80600a0a8981613ce457613ce4615d72565b059850885f03613cf2575f97505b50969850949650611e8395505050505050565b5f8085158415178015613d3157865f03613d255784849250925050611e83565b86869250925050611e83565b613d3b87876146b2565b9097509550613d4a85856146b2565b909550935085841315613d5e579395929492935b838603604c811115613d77578787935093505050611e83565b80600a0a8681613d8957613d89615d72565b0595505086850180881860ff90811c151589881890911c15168015613df257876001600160ff1b0303613dd95760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613df6565b8198505b5096979596505050505050565b5f600882511015613e1557505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613e858460600151856040015161283990919063ffffffff16565b915083604001519050613ea5836040015183611c8890919063ffffffff16565b156134bd5782604001519150613ec88460600151836128b690919063ffffffff16565b90509250929050565b5f836001600160a01b03163b5f03613f2f575f80613eef85856146fb565b5090925090505f816003811115613f0857613f08615cda565b148015613f265750856001600160a01b0316826001600160a01b0316145b92505050610401565b613f3a848484614741565b9050610401565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580613f98575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15613052576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f851215613ff957604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f0361400b57505f90506001611d94565b8460ff841685018581121561403d5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f83121561408957604c19831215614060575f809550955050505050611d94565b825f03600a0a915081848161407757614077615d72565b0495505084029091149150611d949050565b5f83131561412257604d8313156140c65760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f19816140dc576140dc615d72565b048411156141105760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611d949050565b8360019550955050505050611d94565b5f808060ff841681036001600160ff1b0386111561416457600a860460018201600a88065f149350935093505061416e565b8593509150600190505b9250925092565b5f601b83900b83148383826141d9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156141b957620186a0860595506005850194505b8586601b0b146141d457600a860595508460010194506141b9565b6141ef565b855f036141ef57505f9250600191506134bd9050565b848560030b14614232575f85121561420f57505f92508291506134bd9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561427257600160ff1b820361426c5750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6142a4868661427b565b91509150815f036142c8578381816142be576142be615d72565b0492505050610401565b8382106142f95760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156143df576001600160ff1b038411156143cc576143906001600160ff1b03600161559d565b84036143a45750600160ff1b905081611e83565b6143af600a85615ed0565b6143b890615eef565b6143c3846001615dc6565b91509150611e83565b6143d584615eef565b8391509150611e83565b6001600160ff1b038411156143f9576143b8600a85615ed0565b5082905081611e83565b5f80600160ff1b840361444e576001600160ff1b0383036144415760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361447057505f9150819050600161416e565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f0361465d576f4b3b4ca85a86c47a098a22400000000085051580156144d257507f80000000000000000000000000000000000000000000000000000000000000268412155b156144f3576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561453b57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561455457678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156145a057507f800000000000000000000000000000000000000000000000000000000000000a8412155b156145b6576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561460557507f80000000000000000000000000000000000000000000000000000000000000028412155b1561461b576064850294506002840393506145b6565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561464b57506001600160ff1b018412155b1561465d57600a850294506001840393505b600a8086029081058614801561467a57506001600160ff1b018512155b15614689578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6146c18787614458565b925092509250806146ef576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b5f805f8351604103614732576020840151604085015160608601515f1a61472488828585614792565b95509550955050505061416e565b505081515f915060029061416e565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147cb57505f91506003905082614850565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561481c573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661484757505f925060019150829050614850565b92505f91508190505b9450945094915050565b604051806080016040528061486d614886565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148d460405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e00160405280614900614886565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614942575f80fd5b81356001600160e01b031981168114610401575f80fd5b5f8083601f840112614969575f80fd5b50813567ffffffffffffffff811115614980575f80fd5b6020830191508360208260051b85010111156134bd575f80fd5b5f805f604084860312156149ac575f80fd5b833567ffffffffffffffff808211156149c3575f80fd5b9085019060a082880312156149d6575f80fd5b909350602085013590808211156149eb575f80fd5b506149f886828701614959565b9497909650939450505050565b5f60208284031215614a15575f80fd5b5035919050565b6001600160a01b0381168114612f32575f80fd5b803561427681614a1c565b5f805f805f60808688031215614a4f575f80fd5b8535614a5a81614a1c565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a83575f80fd5b614a8f88828901614959565b969995985093965092949392505050565b5f805f60608486031215614ab2575f80fd5b8335614abd81614a1c565b92506020840135614acd81614a1c565b929592945050506040919091013590565b5f805f805f60808688031215614af2575f80fd5b8535614afd81614a1c565b94506020860135614b0d81614a1c565b935060408601359250606086013567ffffffffffffffff80821115614b30575f80fd5b818801915088601f830112614b43575f80fd5b813581811115614b51575f80fd5b896020828501011115614b62575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b85575f80fd5b813561040181614a1c565b5f60c08284031215614ba0575f80fd5b50919050565b5f60208284031215614bb6575f80fd5b813567ffffffffffffffff811115614bcc575f80fd5b61055a84828501614b90565b5f805f60408486031215614bea575f80fd5b833567ffffffffffffffff80821115614c01575f80fd5b614c0d87838801614b90565b945060208601359150808211156149eb575f80fd5b5f60208284031215614c32575f80fd5b813567ffffffffffffffff811115614c48575f80fd5b820160808185031215610401575f80fd5b5f8060208385031215614c6a575f80fd5b823567ffffffffffffffff811115614c80575f80fd5b614c8c85828601614959565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1b57603f19888603018452614d09858351614c98565b94509285019290850190600101614ced565b5092979650505050505050565b5f8060408385031215614d39575f80fd5b8235614d4481614a1c565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8957614d89614d52565b60405160a0810167ffffffffffffffff81118282101715614d8957614d89614d52565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dfe57614dfe614d52565b604052919050565b5f82601f830112614e15575f80fd5b813567ffffffffffffffff811115614e2f57614e2f614d52565b614e42601f8201601f1916602001614dd5565b818152846020838601011115614e56575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e82575f80fd5b614e8a614d66565b90508135614e9781614a1c565b81526020820135614ea781614a1c565b6020820152604082013567ffffffffffffffff811115614ec5575f80fd5b614ed184828501614e06565b60408301525092915050565b5f67ffffffffffffffff821115614ef657614ef6614d52565b5060051b60200190565b5f60408284031215614f10575f80fd5b614f18614d8f565b90508135614f2581614a1c565b808252506020820135602082015292915050565b5f82601f830112614f48575f80fd5b81356020614f5d614f5883614edd565b614dd5565b8083825260208201915060208460061b870101935086841115614f7e575f80fd5b602086015b84811015614fa357614f958882614f00565b835291830191604001614f83565b509695505050505050565b5f60a08284031215614fbe575f80fd5b614fc6614db2565b9050614fd182614a30565b8152602082013567ffffffffffffffff80821115614fed575f80fd5b614ff985838601614e72565b60208401526040840135915080821115615011575f80fd5b61501d85838601614f39565b60408401526060840135915080821115615035575f80fd5b5061504284828501614f39565b6060830152506080820135608082015292915050565b5f615065614f5884614edd565b8381529050602080820190600585811b850187811115615083575f80fd5b855b8181101561517057803567ffffffffffffffff808211156150a4575f80fd5b908801906060828c0312156150b7575f80fd5b6150bf614d66565b82356150ca81614a1c565b815282870135828111156150dc575f80fd5b8301601f81018d136150ec575f80fd5b80356150fa614f5882614edd565b81815290881b8201890190898101908f831115615115575f80fd5b928a01925b828410156151335783358252928a0192908a019061511a565b848b0152506040915050838101358381111561514d575f80fd5b6151598e828701614e06565b918301919091525087525050938301938301615085565b50505050509392505050565b5f82601f83011261518b575f80fd5b61040183833560208501615058565b5f805f805f61014086880312156151af575f80fd5b853567ffffffffffffffff808211156151c6575f80fd5b6151d289838a01614fae565b965060208801359150808211156151e7575f80fd5b6151f389838a01614fae565b95506152028960408a01614b90565b9450610100880135915080821115615218575f80fd5b61522489838a0161517c565b935061012088013591508082111561523a575f80fd5b506152478882890161517c565b9150509295509295909350565b5f6102b43683614fae565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561529381614a1c565b6001600160a01b0390811684526020830135906152af82614a1c565b166020840152604082013536839003601e190181126152cc575f80fd5b820160208101903567ffffffffffffffff8111156152e8575f80fd5b8036038213156152f6575f80fd5b6060604086015261530b60608601828461525f565b95945050505050565b5f808335601e19843603018112615329575f80fd5b830160208101925035905067ffffffffffffffff811115615348575f80fd5b8060061b36038213156134bd575f80fd5b8183525f60208085019450825f5b8581101561539f57813561537a81614a1c565b6001600160a01b03168752818301358388015260409687019690910190600101615367565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153d081614a1c565b166060830152602083013536849003605e190181126153ed575f80fd5b60a060808401526154046101008401858301615287565b90506154136040850185615314565b605f19808685030160a087015261542b848385615359565b935061543a6060880188615314565b93509150808685030160c087015250615454838383615359565b92505050608084013560e084015280915050949350505050565b5f61547b614f5884614edd565b80848252602080830192508560051b850136811115615498575f80fd5b855b8181101561552257803567ffffffffffffffff808211156154b9575f80fd5b8189019150604082360312156154cd575f80fd5b6154d5614d8f565b8235828111156154e3575f80fd5b6154ef36828601614e72565b8252508583013582811115615502575f80fd5b61550e3682860161517c565b82880152508752505093820193820161549a565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261556660a08301848661525f565b98975050505050505050565b5f60208284031215615582575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615589565b5f808335601e198436030181126155c5575f80fd5b83018035915067ffffffffffffffff8211156155df575f80fd5b6020019150600581901b36038213156134bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e1983360301811261561e575f80fd5b9190910192915050565b5f8235609e1983360301811261561e575f80fd5b5f808335601e19843603018112615651575f80fd5b83018035915067ffffffffffffffff82111561566b575f80fd5b6020019150600681901b36038213156134bd575f80fd5b5f60808236031215615692575f80fd5b6040516080810167ffffffffffffffff82821081831117156156b6576156b6614d52565b8160405284359150808211156156ca575f80fd5b6156d636838701614fae565b8352602085013560208401526040850135604084015260608501359150808211156156ff575f80fd5b5061570c3682860161517c565b60608301525092915050565b5f60208284031215615728575f80fd5b81358015158114610401575f80fd5b5f815180845260208085019450602084015f5b8381101561539f57815180516001600160a01b03168852830151838801526040909601959082019060010161574a565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157c7610100850182614c98565b9050604083015184820360408601526157e08282615737565b915050606083015184820360608601526157fa8282615737565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539f57815187529582019590820190600101615824565b5f6001600160a01b0380871683526020608081850152865160808086015261586c61010086018261577a565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b8281101561590857601f1988830301845284518a815116835289810151878b8501526158dc88850182615811565b91890151848303858b01529190506158f48183614c98565b968b0196958b0195935050506001016158ae565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e1984360301811261593f575f80fd5b83018035915067ffffffffffffffff821115615959575f80fd5b6020019150368190038213156134bd575f80fd5b5f8235605e1983360301811261561e575f80fd5b5f6102b43683614e72565b5f6040828403121561599c575f80fd5b6104018383614f00565b6001600160a01b0384168152826020820152606060408201525f61530b606083018461577a565b6001600160a01b0385168152836020820152606060408201525f6159f560608301848661525f565b9695505050505050565b5f610401368484615058565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a508184018761577a565b90508281036040840152615a64818661577a565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f610401602083018461577a565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0757601f19868403018952615af5838351615811565b98840198925090830190600101615ad9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b4d610100840182614c98565b9050606084015160808401526080840151601f19808584030160a0860152615b758383615abc565b925060a08601519150808584030160c0860152615b928383615811565b925060c08601519150808584030160e08601525061530b8282615811565b5f82601f830112615bbf575f80fd5b81516020615bcf614f5883614edd565b8083825260208201915060208460051b870101935086841115615bf0575f80fd5b602086015b84811015614fa35780518352918301918301615bf5565b5f8060408385031215615c1d575f80fd5b825167ffffffffffffffff80821115615c34575f80fd5b818501915085601f830112615c47575f80fd5b81516020615c57614f5883614edd565b82815260059290921b84018101918181019089841115615c75575f80fd5b948201945b83861015615c9357855182529482019490820190615c7a565b91880151919650909350505080821115615cab575f80fd5b50615cb885828601615bb0565b9150509250929050565b828152604060208201525f61055a6040830184615811565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d1a57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60018201615d3857615d38615589565b5060010190565b6001600160a01b0383168152604060208201525f61055a6040830184615abc565b602081525f6104016020830184614c98565b634e487b7160e01b5f52601260045260245ffd5b5f8060408385031215615d97575f80fd5b825160048110615da5575f80fd5b602084015190925060ff81168114615dbb575f80fd5b809150509250929050565b8082018281125f83128015821682158216171561146557611465615589565b600181815b80851115615e1f57815f1904821115615e0557615e05615589565b80851615615e1257918102915b93841c9390800290615dea565b509250929050565b5f82615e35575060016102b4565b81615e4157505f6102b4565b8160018114615e575760028114615e6157615e7d565b60019150506102b4565b60ff841115615e7257615e72615589565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615ea0575081810a6102b4565b615eaa8383615de5565b805f1904821115615ebd57615ebd615589565b029392505050565b5f6104018383615e27565b5f82615eea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600160ff1b820161426c5761426c61558956fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; diff --git a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol index 0770cc5a62..26b59295f7 100644 --- a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x9a0d64fd312dc16761f28a7e13e48a8e8ad2f0ba5995c16710514e7524f43ee2); +bytes32 constant BYTECODE_HASH = bytes32(0x9b1c8621d0c8a809419581558177f2f6801598e4c0b97490d903e687ab466a74); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x1350420cbf3E9eb8F1734bbe466e0F303579eE24); +address constant DEPLOYED_ADDRESS = address(0x6b3094089F9Ff64f82fC209d97a0F642a13A3013); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b03831673f634958cd5f0583ad00a60ee6408638481954ed1146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/lib/deploy/LibRaindexDeploy.sol b/src/lib/deploy/LibRaindexDeploy.sol index b37c8c7975..007e71d6d7 100644 --- a/src/lib/deploy/LibRaindexDeploy.sol +++ b/src/lib/deploy/LibRaindexDeploy.sol @@ -762,6 +762,65 @@ library LibRaindexDeploy { bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_12 = 0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d; + /// The deployed address of the `RaindexV6` contract at the published `0.1.13` + /// tag. (Changed in 0.1.13 — order-counterparty() returns address(0) in + /// post-actions.) + address constant RAINDEX_DEPLOYED_ADDRESS_0_1_13 = 0xF634958cD5F0583ad00a60eE6408638481954eD1; + + /// The runtime code hash of the `RaindexV6` contract at the published `0.1.13` + /// tag. + bytes32 constant RAINDEX_DEPLOYED_CODEHASH_0_1_13 = + 0x0b448817be97eb10589c6c01724ff1af889d25f577368c2a11e0da3a02cc1200; + + /// The deployed address of the `RaindexV6SubParser` contract at the + /// published `0.1.13` tag. (Unchanged from `0.1.2`.) + address constant SUB_PARSER_DEPLOYED_ADDRESS_0_1_13 = 0x09Bc7AF266012F44fb41D8Bd682da931666605e1; + + /// The runtime code hash of the `RaindexV6SubParser` contract at the + /// published `0.1.13` tag. + bytes32 constant SUB_PARSER_DEPLOYED_CODEHASH_0_1_13 = + 0x704aadc1ed56f63ff918ab219e6681a5d2851d774e2ee136bbe7904ea3b2fdcd; + + /// The deployed address of the `RouteProcessor4` contract at the published + /// `0.1.13` tag. (Unchanged from `0.1.0`.) + address constant ROUTE_PROCESSOR_DEPLOYED_ADDRESS_0_1_13 = 0x6E2d0e71d900474b262E545Bc4C98b71ab368d21; + + /// The runtime code hash of the `RouteProcessor4` contract at the published + /// `0.1.13` tag. (Unchanged from `0.1.0`.) + bytes32 constant ROUTE_PROCESSOR_DEPLOYED_CODEHASH_0_1_13 = + 0xeb3745a79c6ba48e8767b9c355b8e7b79f9d6edeca004e4bb91be4de515a7eeb; + + /// The deployed address of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.13` tag. (Changed in 0.1.13 — embeds new raindex + /// address.) + address constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_13 = 0xE85ee58EBC0e989aAe4fC11070c3507F50459D05; + + /// The runtime code hash of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.13` tag. + bytes32 constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_13 = + 0xf5c1bdfa77ca124ef6598c94a207d431efbed2ab018231201e267b65ddc62ee5; + + /// The deployed address of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.13` tag. (Changed in 0.1.13 — embeds new + /// raindex address.) + address constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_13 = + 0x6b3094089F9Ff64f82fC209d97a0F642a13A3013; + + /// The runtime code hash of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.13` tag. + bytes32 constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_13 = + 0x9b1c8621d0c8a809419581558177f2f6801598e4c0b97490d903e687ab466a74; + + /// The deployed address of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.13` tag. (Changed in 0.1.13 — embeds new raindex + /// address.) + address constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_ADDRESS_0_1_13 = 0xE85e902dB1eB3897f9D419B53cEB39D14644E621; + + /// The runtime code hash of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.13` tag. + bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_13 = + 0xb5a357e18838d2513e6a67c493adb9467b8bd5a90c22d6e6bbe0cbc218c3f948; + uint256 constant RAINDEX_START_BLOCK_ARBITRUM = 473899359; uint256 constant RAINDEX_START_BLOCK_BASE = 47387582; uint256 constant RAINDEX_START_BLOCK_FLARE = 63011168; diff --git a/test/concrete/raindex/RaindexV6.addOrder.entask.t.sol b/test/concrete/raindex/RaindexV6.addOrder.entask.t.sol index 8bac05aa73..6580fb2028 100644 --- a/test/concrete/raindex/RaindexV6.addOrder.entask.t.sol +++ b/test/concrete/raindex/RaindexV6.addOrder.entask.t.sol @@ -201,4 +201,26 @@ contract RaindexV6AddOrderEnactTest is RaindexV6ExternalRealTest { checkAddOrder(alice, config, evals, 0, 0); } + + /// order-counterparty() in an addOrder post-action must return address(0) + /// (no counterparty in an add-order context) rather than panicking with an + /// array OOB access. Fixes #2619. + /// forge-config: default.fuzz.runs = 10 + function testAddOrderCounterpartyIsZeroAddress(address alice, OrderConfigV4 memory config) external { + LibTestAddOrder.conformConfig(config, iInterpreter, iStore); + + string memory usingWordsFrom = string.concat("using-words-from ", address(iSubParser).toHexString(), "\n"); + + bytes[] memory evals = new bytes[](1); + evals[0] = bytes( + string.concat( + usingWordsFrom, + ":ensure(equal-to(order-counterparty() ", + address(0).toHexString(), + ") \"order-counterparty zero\");" + ) + ); + + checkAddOrder(alice, config, evals, 0, 0); + } }