From 232149b53bd3233f21fcf731e57e64396b3a3fb2 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 16 Jul 2024 11:53:30 +0200 Subject: [PATCH] add support for forkID in the tool 'deployVerifier' --- compiled-contracts/ClaimCompressor.json | 4 +- compiled-contracts/FflonkVerifier.json | 4 +- compiled-contracts/PolygonRollupManager.json | 4 +- .../PolygonRollupManagerMock.json | 4 +- .../PolygonRollupManagerMockInternalTest.json | 4 +- compiled-contracts/PolygonValidiumEtrog.json | 4 +- compiled-contracts/PolygonZkEVMEtrog.json | 4 +- .../PolygonZkEVMEtrogPrevious.json | 4 +- .../PolygonZkEVMExistentEtrog.json | 4 +- contracts/verifiers/FflonkVerifier_10.sol | 1244 +++++++++++++++++ contracts/verifiers/FflonkVerifier_11.sol | 1244 +++++++++++++++++ docs/v2/lib/PolygonRollupBaseEtrog.md | 9 + tools/deployVerifier/.gitignore | 1 + tools/deployVerifier/README.md | 36 + tools/deployVerifier/deployVerifier.ts | 20 +- .../deploy_verifier_parameters.example | 1 + 16 files changed, 2566 insertions(+), 25 deletions(-) create mode 100644 contracts/verifiers/FflonkVerifier_10.sol create mode 100644 contracts/verifiers/FflonkVerifier_11.sol create mode 100644 tools/deployVerifier/.gitignore create mode 100644 tools/deployVerifier/README.md diff --git a/compiled-contracts/ClaimCompressor.json b/compiled-contracts/ClaimCompressor.json index f099f8ac9..1e99f81db 100644 --- a/compiled-contracts/ClaimCompressor.json +++ b/compiled-contracts/ClaimCompressor.json @@ -109,8 +109,8 @@ "type": "function" } ], - "bytecode": "0x60c060405234801561000f575f80fd5b50604051610dd5380380610dd583398101604081905261002e9161004a565b6001600160a01b0390911660805263ffffffff1660a052610095565b5f806040838503121561005b575f80fd5b82516001600160a01b0381168114610071575f80fd5b602084015190925063ffffffff8116811461008a575f80fd5b809150509250929050565b60805160a051610d1f6100b65f395f61043201525f6104540152610d1f5ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806304e5557b1461003857806397b1410f14610061575b5f80fd5b61004b6100463660046105e9565b610076565b6040516100589190610687565b60405180910390f35b61007461006f3660046106d7565b61042b565b005b60605f8585604051602001610095929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290505f805b8481101561041f575f8686838181106100e3576100e3610743565b90506020028101906100f59190610770565b6100fe9061095f565b90505f825f03610110575060206101a0565b5f5b602081101561019e578888610128600187610a55565b81811061013757610137610743565b90506020028101906101499190610770565b816020811061015a5761015a610743565b6020020135835f0151826020811061017457610174610743565b60200201511461018c57610189816001610a6e565b91505b8061019681610a81565b915050610112565b505b6040805160f883901b7fff000000000000000000000000000000000000000000000000000000000000001660208201528151600181830301815260219091019091525f5b8281101561023b5783518290826020811061020157610201610743565b6020020151604051602001610217929190610ad3565b6040516020818303038152906040529150808061023390610a81565b9150506101e4565b506020830151515f9250156102fd57831580610255575084155b1561026357602091506102f8565b5f5b60208110156102f657898961027b600188610a55565b81811061028a5761028a610743565b905060200281019061029c9190610770565b6104000181602081106102b1576102b1610743565b6020020135846020015182602081106102cc576102cc610743565b6020020151146102e4576102e1816001610a6e565b92505b806102ee81610a81565b915050610265565b505b600194505b8082604051602001610310929190610af4565b60405160208183030381529060405290505f5b8281101561037c57818460200151826020811061034257610342610743565b6020020151604051602001610358929190610ad3565b6040516020818303038152906040529150808061037490610a81565b915050610323565b505f83610100015161038e575f610391565b60015b6040858101516060870151608088015160a089015160c08a015160e08b0151805187516103d399988c989081901c979096909590949093909291602001610b3d565b604051602081830303815290604052905086816040516020016103f7929190610cbb565b604051602081830303815290604052965050505050808061041790610a81565b9150506100c8565b50909695505050505050565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000063ccaa2d1163f5efcd798585602082610824376020828101610844376108a486905261092061090452604082015b8183018110156105de57803560f81c80156104c357600181146104e0576104f9565b856003538560081c6002538560101c6001538560181c5f536104f9565b846003538460081c6002538460101c6001538460181c5f535b5060028101906004906001013560f81c60200280838337909101600181019161040001906020903560f81c02808383379190910190610400810190823560f81c9061041701536001820191506008826018830137600882019150606081019050600482601c830137600482019150602081019050601482600c83013760149182019160408201918390604c01376014820191506020810190506020828237602082013560e01c60408201819052602490920191606090910190808383375f91810182905291820191601f80821660200316016109440190808281808b5af150506104a1565b505050505050505050565b5f805f80606085870312156105fc575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115610621575f80fd5b818701915087601f830112610634575f80fd5b813581811115610642575f80fd5b8860208260051b8501011115610656575f80fd5b95989497505060200194505050565b5f5b8381101561067f578181015183820152602001610667565b50505f910152565b602081525f82518060208401526106a5816040850160208701610665565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f80602083850312156106e8575f80fd5b823567ffffffffffffffff808211156106ff575f80fd5b818501915085601f830112610712575f80fd5b813581811115610720575f80fd5b866020828501011115610731575f80fd5b60209290920196919550909350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7218336030181126107a2575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156107fd576107fd6107ac565b60405290565b5f82601f830112610812575f80fd5b60405161040080820182811067ffffffffffffffff82111715610837576108376107ac565b60405283018185821115610849575f80fd5b845b8281101561086357803582526020918201910161084b565b509195945050505050565b803563ffffffff81168114610881575f80fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610881575f80fd5b5f82601f8301126108b8575f80fd5b813567ffffffffffffffff808211156108d3576108d36107ac565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610919576109196107ac565b81604052838152866020858801011115610931575f80fd5b836020870160208301375f602085830101528094505050505092915050565b80358015158114610881575f80fd5b5f6108e08236031215610970575f80fd5b6109786107d9565b6109823684610803565b8152610992366104008501610803565b602082015261080083013560408201526109af610820840161086e565b60608201526109c16108408401610886565b60808201526109d36108608401610886565b60a082015261088083013560c08201526108a083013567ffffffffffffffff8111156109fd575f80fd5b610a09368286016108a9565b60e083015250610a1c6108c08401610950565b61010082015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610a6857610a68610a28565b92915050565b80820180821115610a6857610a68610a28565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ab157610ab1610a28565b5060010190565b5f8151610ac9818560208601610665565b9290920192915050565b5f8351610ae4818460208801610665565b9190910191825250602001919050565b5f8351610b05818460208801610665565b60f89390931b7fff00000000000000000000000000000000000000000000000000000000000000169190920190815260010192915050565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b1681525f8a51610b79816001850160208f01610665565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b16600182850101527fffffffffffffffff0000000000000000000000000000000000000000000000008a60c01b16600282850101527fffffffff000000000000000000000000000000000000000000000000000000008960e01b16600a82850101527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600e8285010152610c606022828501018860601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b8560368285010152610c9b6056828501018660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b610caa605a8285010185610ab8565b9d9c50505050505050505050505050565b5f8351610ccc818460208801610665565b835190830190610ce0818360208801610665565b0194935050505056fea26469706673582212203790926a4982ec1c7e6a5fa8272afc0fcbc3412fa5f2bf734bdb6a421c359caa64736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806304e5557b1461003857806397b1410f14610061575b5f80fd5b61004b6100463660046105e9565b610076565b6040516100589190610687565b60405180910390f35b61007461006f3660046106d7565b61042b565b005b60605f8585604051602001610095929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290505f805b8481101561041f575f8686838181106100e3576100e3610743565b90506020028101906100f59190610770565b6100fe9061095f565b90505f825f03610110575060206101a0565b5f5b602081101561019e578888610128600187610a55565b81811061013757610137610743565b90506020028101906101499190610770565b816020811061015a5761015a610743565b6020020135835f0151826020811061017457610174610743565b60200201511461018c57610189816001610a6e565b91505b8061019681610a81565b915050610112565b505b6040805160f883901b7fff000000000000000000000000000000000000000000000000000000000000001660208201528151600181830301815260219091019091525f5b8281101561023b5783518290826020811061020157610201610743565b6020020151604051602001610217929190610ad3565b6040516020818303038152906040529150808061023390610a81565b9150506101e4565b506020830151515f9250156102fd57831580610255575084155b1561026357602091506102f8565b5f5b60208110156102f657898961027b600188610a55565b81811061028a5761028a610743565b905060200281019061029c9190610770565b6104000181602081106102b1576102b1610743565b6020020135846020015182602081106102cc576102cc610743565b6020020151146102e4576102e1816001610a6e565b92505b806102ee81610a81565b915050610265565b505b600194505b8082604051602001610310929190610af4565b60405160208183030381529060405290505f5b8281101561037c57818460200151826020811061034257610342610743565b6020020151604051602001610358929190610ad3565b6040516020818303038152906040529150808061037490610a81565b915050610323565b505f83610100015161038e575f610391565b60015b6040858101516060870151608088015160a089015160c08a015160e08b0151805187516103d399988c989081901c979096909590949093909291602001610b3d565b604051602081830303815290604052905086816040516020016103f7929190610cbb565b604051602081830303815290604052965050505050808061041790610a81565b9150506100c8565b50909695505050505050565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000063ccaa2d1163f5efcd798585602082610824376020828101610844376108a486905261092061090452604082015b8183018110156105de57803560f81c80156104c357600181146104e0576104f9565b856003538560081c6002538560101c6001538560181c5f536104f9565b846003538460081c6002538460101c6001538460181c5f535b5060028101906004906001013560f81c60200280838337909101600181019161040001906020903560f81c02808383379190910190610400810190823560f81c9061041701536001820191506008826018830137600882019150606081019050600482601c830137600482019150602081019050601482600c83013760149182019160408201918390604c01376014820191506020810190506020828237602082013560e01c60408201819052602490920191606090910190808383375f91810182905291820191601f80821660200316016109440190808281808b5af150506104a1565b505050505050505050565b5f805f80606085870312156105fc575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115610621575f80fd5b818701915087601f830112610634575f80fd5b813581811115610642575f80fd5b8860208260051b8501011115610656575f80fd5b95989497505060200194505050565b5f5b8381101561067f578181015183820152602001610667565b50505f910152565b602081525f82518060208401526106a5816040850160208701610665565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f80602083850312156106e8575f80fd5b823567ffffffffffffffff808211156106ff575f80fd5b818501915085601f830112610712575f80fd5b813581811115610720575f80fd5b866020828501011115610731575f80fd5b60209290920196919550909350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7218336030181126107a2575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156107fd576107fd6107ac565b60405290565b5f82601f830112610812575f80fd5b60405161040080820182811067ffffffffffffffff82111715610837576108376107ac565b60405283018185821115610849575f80fd5b845b8281101561086357803582526020918201910161084b565b509195945050505050565b803563ffffffff81168114610881575f80fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610881575f80fd5b5f82601f8301126108b8575f80fd5b813567ffffffffffffffff808211156108d3576108d36107ac565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610919576109196107ac565b81604052838152866020858801011115610931575f80fd5b836020870160208301375f602085830101528094505050505092915050565b80358015158114610881575f80fd5b5f6108e08236031215610970575f80fd5b6109786107d9565b6109823684610803565b8152610992366104008501610803565b602082015261080083013560408201526109af610820840161086e565b60608201526109c16108408401610886565b60808201526109d36108608401610886565b60a082015261088083013560c08201526108a083013567ffffffffffffffff8111156109fd575f80fd5b610a09368286016108a9565b60e083015250610a1c6108c08401610950565b61010082015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610a6857610a68610a28565b92915050565b80820180821115610a6857610a68610a28565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ab157610ab1610a28565b5060010190565b5f8151610ac9818560208601610665565b9290920192915050565b5f8351610ae4818460208801610665565b9190910191825250602001919050565b5f8351610b05818460208801610665565b60f89390931b7fff00000000000000000000000000000000000000000000000000000000000000169190920190815260010192915050565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b1681525f8a51610b79816001850160208f01610665565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b16600182850101527fffffffffffffffff0000000000000000000000000000000000000000000000008a60c01b16600282850101527fffffffff000000000000000000000000000000000000000000000000000000008960e01b16600a82850101527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600e8285010152610c606022828501018860601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b8560368285010152610c9b6056828501018660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b610caa605a8285010185610ab8565b9d9c50505050505050505050505050565b5f8351610ccc818460208801610665565b835190830190610ce0818360208801610665565b0194935050505056fea26469706673582212203790926a4982ec1c7e6a5fa8272afc0fcbc3412fa5f2bf734bdb6a421c359caa64736f6c63430008140033", + "bytecode": "0x60c060405234801561000f575f80fd5b50604051610de8380380610de883398101604081905261002e9161004a565b6001600160a01b0390911660805263ffffffff1660a052610095565b5f806040838503121561005b575f80fd5b82516001600160a01b0381168114610071575f80fd5b602084015190925063ffffffff8116811461008a575f80fd5b809150509250929050565b60805160a051610d326100b65f395f61043201525f6104540152610d325ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806304e5557b1461003857806397b1410f14610061575b5f80fd5b61004b6100463660046105fc565b610076565b604051610058919061069a565b60405180910390f35b61007461006f3660046106ea565b61042b565b005b60605f8585604051602001610095929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290505f805b8481101561041f575f8686838181106100e3576100e3610756565b90506020028101906100f59190610783565b6100fe90610972565b90505f825f03610110575060206101a0565b5f5b602081101561019e578888610128600187610a68565b81811061013757610137610756565b90506020028101906101499190610783565b816020811061015a5761015a610756565b6020020135835f0151826020811061017457610174610756565b60200201511461018c57610189816001610a81565b91505b8061019681610a94565b915050610112565b505b6040805160f883901b7fff000000000000000000000000000000000000000000000000000000000000001660208201528151600181830301815260219091019091525f5b8281101561023b5783518290826020811061020157610201610756565b6020020151604051602001610217929190610ae6565b6040516020818303038152906040529150808061023390610a94565b9150506101e4565b506020830151515f9250156102fd57831580610255575084155b1561026357602091506102f8565b5f5b60208110156102f657898961027b600188610a68565b81811061028a5761028a610756565b905060200281019061029c9190610783565b6104000181602081106102b1576102b1610756565b6020020135846020015182602081106102cc576102cc610756565b6020020151146102e4576102e1816001610a81565b92505b806102ee81610a94565b915050610265565b505b600194505b8082604051602001610310929190610b07565b60405160208183030381529060405290505f5b8281101561037c57818460200151826020811061034257610342610756565b6020020151604051602001610358929190610ae6565b6040516020818303038152906040529150808061037490610a94565b915050610323565b505f83610100015161038e575f610391565b60015b6040858101516060870151608088015160a089015160c08a015160e08b0151805187516103d399988c989081901c979096909590949093909291602001610b50565b604051602081830303815290604052905086816040516020016103f7929190610cce565b604051602081830303815290604052965050505050808061041790610a94565b9150506100c8565b50909695505050505050565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000063ccaa2d1163f5efcd798585602082610824376020828101610844376108a486905261092061090452604082015b8183018110156105f157803560f81c80156104c357600181146104e0576104f9565b856003538560081c6002538560101c6001538560181c5f536104f9565b846003538460081c6002538460101c6001538460181c5f535b5060028101906004906001013560f81c60200280838337909101600181019161040001906020903560f81c02808383379190910190610400810190823560f81c9061041701536001820191506008826018830137600882019150606081019050600482601c830137600482019150602081019050601482600c83013760149182019160408201918390604c01376014820191506020810190506020828237602082013560e01c60408201819052602490920191606090910190808383375f9181019190915290810190601f808216602003160161094401622625a05a10156105df575f80fd5b5f80825f808b621e8480f150506104a1565b505050505050505050565b5f805f806060858703121561060f575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115610634575f80fd5b818701915087601f830112610647575f80fd5b813581811115610655575f80fd5b8860208260051b8501011115610669575f80fd5b95989497505060200194505050565b5f5b8381101561069257818101518382015260200161067a565b50505f910152565b602081525f82518060208401526106b8816040850160208701610678565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f80602083850312156106fb575f80fd5b823567ffffffffffffffff80821115610712575f80fd5b818501915085601f830112610725575f80fd5b813581811115610733575f80fd5b866020828501011115610744575f80fd5b60209290920196919550909350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7218336030181126107b5575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff81118282101715610810576108106107bf565b60405290565b5f82601f830112610825575f80fd5b60405161040080820182811067ffffffffffffffff8211171561084a5761084a6107bf565b6040528301818582111561085c575f80fd5b845b8281101561087657803582526020918201910161085e565b509195945050505050565b803563ffffffff81168114610894575f80fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610894575f80fd5b5f82601f8301126108cb575f80fd5b813567ffffffffffffffff808211156108e6576108e66107bf565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561092c5761092c6107bf565b81604052838152866020858801011115610944575f80fd5b836020870160208301375f602085830101528094505050505092915050565b80358015158114610894575f80fd5b5f6108e08236031215610983575f80fd5b61098b6107ec565b6109953684610816565b81526109a5366104008501610816565b602082015261080083013560408201526109c26108208401610881565b60608201526109d46108408401610899565b60808201526109e66108608401610899565b60a082015261088083013560c08201526108a083013567ffffffffffffffff811115610a10575f80fd5b610a1c368286016108bc565b60e083015250610a2f6108c08401610963565b61010082015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610a7b57610a7b610a3b565b92915050565b80820180821115610a7b57610a7b610a3b565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ac457610ac4610a3b565b5060010190565b5f8151610adc818560208601610678565b9290920192915050565b5f8351610af7818460208801610678565b9190910191825250602001919050565b5f8351610b18818460208801610678565b60f89390931b7fff00000000000000000000000000000000000000000000000000000000000000169190920190815260010192915050565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b1681525f8a51610b8c816001850160208f01610678565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b16600182850101527fffffffffffffffff0000000000000000000000000000000000000000000000008a60c01b16600282850101527fffffffff000000000000000000000000000000000000000000000000000000008960e01b16600a82850101527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600e8285010152610c736022828501018860601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b8560368285010152610cae6056828501018660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b610cbd605a8285010185610acb565b9d9c50505050505050505050505050565b5f8351610cdf818460208801610678565b835190830190610cf3818360208801610678565b0194935050505056fea2646970667358221220a1e9c50eb148023b40cc2831833735d6ddde17c98296b462158fe89bcb08033e64736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806304e5557b1461003857806397b1410f14610061575b5f80fd5b61004b6100463660046105fc565b610076565b604051610058919061069a565b60405180910390f35b61007461006f3660046106ea565b61042b565b005b60605f8585604051602001610095929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290505f805b8481101561041f575f8686838181106100e3576100e3610756565b90506020028101906100f59190610783565b6100fe90610972565b90505f825f03610110575060206101a0565b5f5b602081101561019e578888610128600187610a68565b81811061013757610137610756565b90506020028101906101499190610783565b816020811061015a5761015a610756565b6020020135835f0151826020811061017457610174610756565b60200201511461018c57610189816001610a81565b91505b8061019681610a94565b915050610112565b505b6040805160f883901b7fff000000000000000000000000000000000000000000000000000000000000001660208201528151600181830301815260219091019091525f5b8281101561023b5783518290826020811061020157610201610756565b6020020151604051602001610217929190610ae6565b6040516020818303038152906040529150808061023390610a94565b9150506101e4565b506020830151515f9250156102fd57831580610255575084155b1561026357602091506102f8565b5f5b60208110156102f657898961027b600188610a68565b81811061028a5761028a610756565b905060200281019061029c9190610783565b6104000181602081106102b1576102b1610756565b6020020135846020015182602081106102cc576102cc610756565b6020020151146102e4576102e1816001610a81565b92505b806102ee81610a94565b915050610265565b505b600194505b8082604051602001610310929190610b07565b60405160208183030381529060405290505f5b8281101561037c57818460200151826020811061034257610342610756565b6020020151604051602001610358929190610ae6565b6040516020818303038152906040529150808061037490610a94565b915050610323565b505f83610100015161038e575f610391565b60015b6040858101516060870151608088015160a089015160c08a015160e08b0151805187516103d399988c989081901c979096909590949093909291602001610b50565b604051602081830303815290604052905086816040516020016103f7929190610cce565b604051602081830303815290604052965050505050808061041790610a94565b9150506100c8565b50909695505050505050565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000063ccaa2d1163f5efcd798585602082610824376020828101610844376108a486905261092061090452604082015b8183018110156105f157803560f81c80156104c357600181146104e0576104f9565b856003538560081c6002538560101c6001538560181c5f536104f9565b846003538460081c6002538460101c6001538460181c5f535b5060028101906004906001013560f81c60200280838337909101600181019161040001906020903560f81c02808383379190910190610400810190823560f81c9061041701536001820191506008826018830137600882019150606081019050600482601c830137600482019150602081019050601482600c83013760149182019160408201918390604c01376014820191506020810190506020828237602082013560e01c60408201819052602490920191606090910190808383375f9181019190915290810190601f808216602003160161094401622625a05a10156105df575f80fd5b5f80825f808b621e8480f150506104a1565b505050505050505050565b5f805f806060858703121561060f575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115610634575f80fd5b818701915087601f830112610647575f80fd5b813581811115610655575f80fd5b8860208260051b8501011115610669575f80fd5b95989497505060200194505050565b5f5b8381101561069257818101518382015260200161067a565b50505f910152565b602081525f82518060208401526106b8816040850160208701610678565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f80602083850312156106fb575f80fd5b823567ffffffffffffffff80821115610712575f80fd5b818501915085601f830112610725575f80fd5b813581811115610733575f80fd5b866020828501011115610744575f80fd5b60209290920196919550909350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7218336030181126107b5575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff81118282101715610810576108106107bf565b60405290565b5f82601f830112610825575f80fd5b60405161040080820182811067ffffffffffffffff8211171561084a5761084a6107bf565b6040528301818582111561085c575f80fd5b845b8281101561087657803582526020918201910161085e565b509195945050505050565b803563ffffffff81168114610894575f80fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610894575f80fd5b5f82601f8301126108cb575f80fd5b813567ffffffffffffffff808211156108e6576108e66107bf565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561092c5761092c6107bf565b81604052838152866020858801011115610944575f80fd5b836020870160208301375f602085830101528094505050505092915050565b80358015158114610894575f80fd5b5f6108e08236031215610983575f80fd5b61098b6107ec565b6109953684610816565b81526109a5366104008501610816565b602082015261080083013560408201526109c26108208401610881565b60608201526109d46108408401610899565b60808201526109e66108608401610899565b60a082015261088083013560c08201526108a083013567ffffffffffffffff811115610a10575f80fd5b610a1c368286016108bc565b60e083015250610a2f6108c08401610963565b61010082015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610a7b57610a7b610a3b565b92915050565b80820180821115610a7b57610a7b610a3b565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ac457610ac4610a3b565b5060010190565b5f8151610adc818560208601610678565b9290920192915050565b5f8351610af7818460208801610678565b9190910191825250602001919050565b5f8351610b18818460208801610678565b60f89390931b7fff00000000000000000000000000000000000000000000000000000000000000169190920190815260010192915050565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b1681525f8a51610b8c816001850160208f01610678565b7fff000000000000000000000000000000000000000000000000000000000000008b60f81b16600182850101527fffffffffffffffff0000000000000000000000000000000000000000000000008a60c01b16600282850101527fffffffff000000000000000000000000000000000000000000000000000000008960e01b16600a82850101527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600e8285010152610c736022828501018860601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b8560368285010152610cae6056828501018660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b610cbd605a8285010185610acb565b9d9c50505050505050505050505050565b5f8351610cdf818460208801610678565b835190830190610cf3818360208801610678565b0194935050505056fea2646970667358221220a1e9c50eb148023b40cc2831833735d6ddde17c98296b462158fe89bcb08033e64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/FflonkVerifier.json b/compiled-contracts/FflonkVerifier.json index f20d5cd04..484680628 100644 --- a/compiled-contracts/FflonkVerifier.json +++ b/compiled-contracts/FflonkVerifier.json @@ -28,8 +28,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f80fd5b506159c7806200001e5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639121da8a1461002d575b5f80fd5b61004061003b366004615950565b610054565b604051901515815260200160405180910390f35b5f6158e0565b6040516104c08201518082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610500840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610520840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610620840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760840151820990508082526102e4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830960011461050e575f805260205ff35b8091506020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161076085015183099150806107608501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001850151830991508060a06106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001850151830991508060806106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001850151830991508060606106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001850151830991508060406106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001850151830991508060206106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a085015183099150806106a08501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106200185015183099150806060610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106200185015183099150806040610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106200185015183099150806020610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161062085015183099150806106208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001850151830991508060e0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001850151830991508060c0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001850151830991508060a0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806105200185015183099150806080610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606105200185015183099150806060610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406105200185015183099150806040610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206105200185015183099150806020610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161052085015183099150806105208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161050085015183099150806105008501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e085015183099150806104e085015250806104c0840152505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110610d72575f805260205ff35b50565b803560208201357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478085860985090891507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478182099050808214610dfe575f805260205ff35b505050565b610e0d6004610d75565b610e176044610d75565b610e216084610d75565b610e2b60c4610d75565b610e3761010435610d43565b610e4361012435610d43565b610e4f61014435610d43565b610e5b61016435610d43565b610e6761018435610d43565b610e736101a435610d43565b610e7f6101c435610d43565b610e8b6101e435610d43565b610e9761020435610d43565b610ea361022435610d43565b610eaf61024435610d43565b610ebb61026435610d43565b610ec761028435610d43565b610ed36102a435610d43565b610edf6102c435610d43565b610eeb6102e435610d43565b565b7f2ec8834f535d441c0fba27f2e1a4f25f2b0e2eced5ac224b4c6810bc386dbacb61078082019081527f21854418fcd10614b00b220f3ebe61a0a5c8f3b0b499de2686743f9a8aaa38596107a0830190815283356107c084019081526004356107e085015260243561080085015260a083207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908190066020808701918252902081900660408601819052845260443590925260643590526060909120819006608083018190529081800960a0830181905260808301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8060e0840151096101008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f70363660e0840151096101208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f1d59376149b959ccbd157ac850893a6f07c2d99b3852513ab8d01be8e846a56660e0840151096101408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000060e0840151096101608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0530d09118705106cbb4a786ead16926d5d174e181a26686af5448492e42a18160e0840151096101808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb60e0840151096101a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f130b17119778465cfb3acaee30f81dee20710ead41671f568b11d9ab07b95a9b60e0840151096101c083015260e08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019080096101e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f7036366101e0840151096102008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006101e0840151096102208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb6101e0840151096102408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08301516101e0840151096102608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f23610260840151096102808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd610260840151096102a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f283ce45a2e5b8e4e78f9fbaf5f6a348bfcfaf76dd28e5ca7121b74ef68fdec2e610260840151096102c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f236102c0840151096102e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd6102c0840151096103008301526102608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081818009098060c08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018182097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000909101066104a084018190526104c0840152506107808201526101e06101046107a083013761020061078082019081207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081900680845282526084356107a084015260a4356107c08401526060918290200691015250565b60e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018160080960e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105208601526101c08501516101008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105408601526101a08501516101208601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105608601526101808501516101408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961058086015261016085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105a08601526101408501516101808601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105c08601526101208501516101a08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105e08601526101008501516101c08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830960e0610520018601525050505050565b6101e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001816004096101e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106208601526102408501516102008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961064086015261022085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106608601526102008501516102408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096060610620018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c0870151097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030660c0850151087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151600309096102608301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181810381900684087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106a08601526102a08501516102808601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106c08601526102808501516102a08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960406106a0018601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c08801517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103067f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08a015109087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c0880151600309096102c086015190935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001828103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107008601526103008501516102e08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107208601526102e08501516103008601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960a06106a0018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806104e08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102608501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102e08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016103008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806105008401526127f583611944565b6127fe83611d8c565b61280783611fa2565b505060c081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000083018190066301000000096107608401525050610d728161005a565b6104a08101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181610760840151096107608301525050565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185356107608601510983030106905080610320830152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820860e08301519091505f9081807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f61052001890151880984098508935061010086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001890151880984098508935061012086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001890151880984098508935061014086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001890151880984098508935061016086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001890151880984098508935061018086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06105200189015188098409850893506101a086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c06105200189015188098409850893506101c086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e4350983089150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e0610520018801518709830984089250505080610340840152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820890505f6102043561022435610244357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183610104350993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180836101243509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018486096101443509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161018435850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610320870151850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c087015185096101e08701519094505f908490827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f02610620018d01518c098509850893508692506102008a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600102610620018d01518c098509850893508692506102208a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600202610620018d01518c098509850893508692506102408a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001858509098408925050507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600302610620018b01518a09830983089150508061036088015250505050505050565b606081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08901510908820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830860c08501519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190817f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b82090990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089150505f91505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c085015160208601510960408501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828408610204350892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028709086102243508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160038709086102443508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026435840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a43560208b01510908610204350894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c43560208c015109086102243508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e43560208c015109086102443508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028435860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151840992506001610264350394507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760870151860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151860961026087015190955091505f9050807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f026106a0018a0151880983098308915061028087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206001026106a0018a015188098309830891506102a087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206002026106a0018a015188098309830891506102c087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206003026106a0018a015188098309830891506102e087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206004026106a0018a0151880983098308915061030087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206005026106a0018a015188098309830891505080610380870152505050505050565b6040518151815260208201516020820152825160408201526020830151606082015260408260808360066107d05a03fa905080610dfe575f805260205ff35b5f604051833581526020840135602082015284604082015260408160608360076107d05a03fa915081615135575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa91505080615164575f805260205ff35b50505050565b5f60405183815284602082015285604082015260408160608360076107d05a03fa91508161519a575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915050806151c9575f805260205ff35b5050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101608601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806104e0850151830984510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180610500850151830984517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908009097f2ec8834f535d441c0fba27f2e1a4f25f2b0e2eced5ac224b4c6810bc386dbacb6103a08501527f21854418fcd10614b00b220f3ebe61a0a5c8f3b0b499de2686743f9a8aaa385960206103a0018501526156208360046103a08701615100565b6156308160446103a08701615100565b6156bd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161038088015185097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161036089015188090861034087015108600260016103e0880161516a565b50610dfe8160846104208601615100565b604051610400820180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479081038190069091526104408301805182039190910690525f906157256103e084016103a085016150c1565b61573761042084016103a085016150c1565b61574b606084015160c46103a08601615100565b6103a083015181526103c08301516020808301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a083015260c43560c08301527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760e43581030660e08301527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6101008301527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6101208301527f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c026101408301527f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e48610160830152816101808160086107d05a03fa90511692915050565b60405161078081016040526158f3610e03565b6158fd8382610eed565b615906816123ad565b61590f8161286e565b61591983826128a7565b61592281612906565b61592b81613e54565b61593481614549565b61593d816151d0565b615946816156ce565b9050805f5260205ff35b5f80610320808486031215615963575f80fd5b610300840185811115615974575f80fd5b849350858286011115615985575f80fd5b8092505050925092905056fea2646970667358221220f123365b273fc6733067e05b993035a488caf6d0ddb640e40119672cd6b45ee364736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639121da8a1461002d575b5f80fd5b61004061003b366004615950565b610054565b604051901515815260200160405180910390f35b5f6158e0565b6040516104c08201518082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610500840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610520840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610620840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760840151820990508082526102e4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830960011461050e575f805260205ff35b8091506020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161076085015183099150806107608501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001850151830991508060a06106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001850151830991508060806106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001850151830991508060606106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001850151830991508060406106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001850151830991508060206106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a085015183099150806106a08501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106200185015183099150806060610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106200185015183099150806040610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106200185015183099150806020610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161062085015183099150806106208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001850151830991508060e0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001850151830991508060c0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001850151830991508060a0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806105200185015183099150806080610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606105200185015183099150806060610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406105200185015183099150806040610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206105200185015183099150806020610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161052085015183099150806105208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161050085015183099150806105008501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e085015183099150806104e085015250806104c0840152505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110610d72575f805260205ff35b50565b803560208201357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478085860985090891507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478182099050808214610dfe575f805260205ff35b505050565b610e0d6004610d75565b610e176044610d75565b610e216084610d75565b610e2b60c4610d75565b610e3761010435610d43565b610e4361012435610d43565b610e4f61014435610d43565b610e5b61016435610d43565b610e6761018435610d43565b610e736101a435610d43565b610e7f6101c435610d43565b610e8b6101e435610d43565b610e9761020435610d43565b610ea361022435610d43565b610eaf61024435610d43565b610ebb61026435610d43565b610ec761028435610d43565b610ed36102a435610d43565b610edf6102c435610d43565b610eeb6102e435610d43565b565b7f2ec8834f535d441c0fba27f2e1a4f25f2b0e2eced5ac224b4c6810bc386dbacb61078082019081527f21854418fcd10614b00b220f3ebe61a0a5c8f3b0b499de2686743f9a8aaa38596107a0830190815283356107c084019081526004356107e085015260243561080085015260a083207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908190066020808701918252902081900660408601819052845260443590925260643590526060909120819006608083018190529081800960a0830181905260808301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8060e0840151096101008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f70363660e0840151096101208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f1d59376149b959ccbd157ac850893a6f07c2d99b3852513ab8d01be8e846a56660e0840151096101408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000060e0840151096101608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0530d09118705106cbb4a786ead16926d5d174e181a26686af5448492e42a18160e0840151096101808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb60e0840151096101a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f130b17119778465cfb3acaee30f81dee20710ead41671f568b11d9ab07b95a9b60e0840151096101c083015260e08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019080096101e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f7036366101e0840151096102008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006101e0840151096102208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb6101e0840151096102408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08301516101e0840151096102608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f23610260840151096102808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd610260840151096102a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f283ce45a2e5b8e4e78f9fbaf5f6a348bfcfaf76dd28e5ca7121b74ef68fdec2e610260840151096102c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f236102c0840151096102e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd6102c0840151096103008301526102608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081818009098060c08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018182097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000909101066104a084018190526104c0840152506107808201526101e06101046107a083013761020061078082019081207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081900680845282526084356107a084015260a4356107c08401526060918290200691015250565b60e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018160080960e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105208601526101c08501516101008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105408601526101a08501516101208601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105608601526101808501516101408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961058086015261016085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105a08601526101408501516101808601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105c08601526101208501516101a08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105e08601526101008501516101c08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830960e0610520018601525050505050565b6101e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001816004096101e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106208601526102408501516102008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961064086015261022085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106608601526102008501516102408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096060610620018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c0870151097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030660c0850151087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151600309096102608301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181810381900684087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106a08601526102a08501516102808601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106c08601526102808501516102a08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960406106a0018601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c08801517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103067f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08a015109087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c0880151600309096102c086015190935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001828103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107008601526103008501516102e08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107208601526102e08501516103008601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960a06106a0018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806104e08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102608501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102e08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016103008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806105008401526127f583611944565b6127fe83611d8c565b61280783611fa2565b505060c081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000083018190066301000000096107608401525050610d728161005a565b6104a08101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181610760840151096107608301525050565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185356107608601510983030106905080610320830152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820860e08301519091505f9081807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f61052001890151880984098508935061010086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001890151880984098508935061012086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001890151880984098508935061014086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001890151880984098508935061016086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001890151880984098508935061018086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06105200189015188098409850893506101a086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c06105200189015188098409850893506101c086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e4350983089150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e0610520018801518709830984089250505080610340840152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820890505f6102043561022435610244357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183610104350993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180836101243509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018486096101443509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161018435850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610320870151850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c087015185096101e08701519094505f908490827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f02610620018d01518c098509850893508692506102008a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600102610620018d01518c098509850893508692506102208a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600202610620018d01518c098509850893508692506102408a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001858509098408925050507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600302610620018b01518a09830983089150508061036088015250505050505050565b606081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08901510908820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830860c08501519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190817f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b82090990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089150505f91505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c085015160208601510960408501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828408610204350892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028709086102243508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160038709086102443508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026435840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a43560208b01510908610204350894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c43560208c015109086102243508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e43560208c015109086102443508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028435860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151840992506001610264350394507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760870151860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151860961026087015190955091505f9050807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f026106a0018a0151880983098308915061028087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206001026106a0018a015188098309830891506102a087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206002026106a0018a015188098309830891506102c087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206003026106a0018a015188098309830891506102e087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206004026106a0018a0151880983098308915061030087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206005026106a0018a015188098309830891505080610380870152505050505050565b6040518151815260208201516020820152825160408201526020830151606082015260408260808360066107d05a03fa905080610dfe575f805260205ff35b5f604051833581526020840135602082015284604082015260408160608360076107d05a03fa915081615135575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa91505080615164575f805260205ff35b50505050565b5f60405183815284602082015285604082015260408160608360076107d05a03fa91508161519a575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915050806151c9575f805260205ff35b5050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101608601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806104e0850151830984510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180610500850151830984517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908009097f2ec8834f535d441c0fba27f2e1a4f25f2b0e2eced5ac224b4c6810bc386dbacb6103a08501527f21854418fcd10614b00b220f3ebe61a0a5c8f3b0b499de2686743f9a8aaa385960206103a0018501526156208360046103a08701615100565b6156308160446103a08701615100565b6156bd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161038088015185097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161036089015188090861034087015108600260016103e0880161516a565b50610dfe8160846104208601615100565b604051610400820180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479081038190069091526104408301805182039190910690525f906157256103e084016103a085016150c1565b61573761042084016103a085016150c1565b61574b606084015160c46103a08601615100565b6103a083015181526103c08301516020808301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a083015260c43560c08301527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760e43581030660e08301527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6101008301527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6101208301527f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c026101408301527f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e48610160830152816101808160086107d05a03fa90511692915050565b60405161078081016040526158f3610e03565b6158fd8382610eed565b615906816123ad565b61590f8161286e565b61591983826128a7565b61592281612906565b61592b81613e54565b61593481614549565b61593d816151d0565b615946816156ce565b9050805f5260205ff35b5f80610320808486031215615963575f80fd5b610300840185811115615974575f80fd5b849350858286011115615985575f80fd5b8092505050925092905056fea2646970667358221220f123365b273fc6733067e05b993035a488caf6d0ddb640e40119672cd6b45ee364736f6c63430008140033", + "bytecode": "0x608060405234801561000f575f80fd5b506159c7806200001e5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639121da8a1461002d575b5f80fd5b61004061003b366004615950565b610054565b604051901515815260200160405180910390f35b5f6158e0565b6040516104c08201518082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610500840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610520840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610620840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760840151820990508082526102e4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830960011461050e575f805260205ff35b8091506020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161076085015183099150806107608501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001850151830991508060a06106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001850151830991508060806106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001850151830991508060606106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001850151830991508060406106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001850151830991508060206106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a085015183099150806106a08501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106200185015183099150806060610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106200185015183099150806040610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106200185015183099150806020610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161062085015183099150806106208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001850151830991508060e0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001850151830991508060c0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001850151830991508060a0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806105200185015183099150806080610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606105200185015183099150806060610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406105200185015183099150806040610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206105200185015183099150806020610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161052085015183099150806105208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161050085015183099150806105008501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e085015183099150806104e085015250806104c0840152505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110610d72575f805260205ff35b50565b803560208201357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478085860985090891507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478182099050808214610dfe575f805260205ff35b505050565b610e0d6004610d75565b610e176044610d75565b610e216084610d75565b610e2b60c4610d75565b610e3761010435610d43565b610e4361012435610d43565b610e4f61014435610d43565b610e5b61016435610d43565b610e6761018435610d43565b610e736101a435610d43565b610e7f6101c435610d43565b610e8b6101e435610d43565b610e9761020435610d43565b610ea361022435610d43565b610eaf61024435610d43565b610ebb61026435610d43565b610ec761028435610d43565b610ed36102a435610d43565b610edf6102c435610d43565b610eeb6102e435610d43565b565b7f2b2e45f5cc9fcd40390415fe6f5c6f2f410c781ec6946e45dec011c588e35f7061078082019081527f2564b62a9cb6f1a55f51bda397195f2c0d8ec2c392d46e8563632fc015dfbf906107a0830190815283356107c084019081526004356107e085015260243561080085015260a083207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908190066020808701918252902081900660408601819052845260443590925260643590526060909120819006608083018190529081800960a0830181905260808301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8060e0840151096101008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f70363660e0840151096101208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f1d59376149b959ccbd157ac850893a6f07c2d99b3852513ab8d01be8e846a56660e0840151096101408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000060e0840151096101608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0530d09118705106cbb4a786ead16926d5d174e181a26686af5448492e42a18160e0840151096101808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb60e0840151096101a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f130b17119778465cfb3acaee30f81dee20710ead41671f568b11d9ab07b95a9b60e0840151096101c083015260e08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019080096101e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f7036366101e0840151096102008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006101e0840151096102208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb6101e0840151096102408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08301516101e0840151096102608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f23610260840151096102808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd610260840151096102a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f283ce45a2e5b8e4e78f9fbaf5f6a348bfcfaf76dd28e5ca7121b74ef68fdec2e610260840151096102c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f236102c0840151096102e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd6102c0840151096103008301526102608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081818009098060c08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018182097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000909101066104a084018190526104c0840152506107808201526101e06101046107a083013761020061078082019081207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081900680845282526084356107a084015260a4356107c08401526060918290200691015250565b60e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018160080960e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105208601526101c08501516101008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105408601526101a08501516101208601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105608601526101808501516101408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961058086015261016085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105a08601526101408501516101808601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105c08601526101208501516101a08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105e08601526101008501516101c08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830960e0610520018601525050505050565b6101e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001816004096101e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106208601526102408501516102008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961064086015261022085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106608601526102008501516102408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096060610620018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c0870151097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030660c0850151087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151600309096102608301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181810381900684087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106a08601526102a08501516102808601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106c08601526102808501516102a08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960406106a0018601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c08801517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103067f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08a015109087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c0880151600309096102c086015190935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001828103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107008601526103008501516102e08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107208601526102e08501516103008601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960a06106a0018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806104e08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102608501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102e08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016103008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806105008401526127f583611944565b6127fe83611d8c565b61280783611fa2565b505060c081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000083018190066301000000096107608401525050610d728161005a565b6104a08101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181610760840151096107608301525050565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185356107608601510983030106905080610320830152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820860e08301519091505f9081807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f61052001890151880984098508935061010086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001890151880984098508935061012086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001890151880984098508935061014086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001890151880984098508935061016086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001890151880984098508935061018086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06105200189015188098409850893506101a086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c06105200189015188098409850893506101c086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e4350983089150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e0610520018801518709830984089250505080610340840152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820890505f6102043561022435610244357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183610104350993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180836101243509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018486096101443509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161018435850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610320870151850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c087015185096101e08701519094505f908490827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f02610620018d01518c098509850893508692506102008a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600102610620018d01518c098509850893508692506102208a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600202610620018d01518c098509850893508692506102408a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001858509098408925050507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600302610620018b01518a09830983089150508061036088015250505050505050565b606081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08901510908820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830860c08501519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190817f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b82090990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089150505f91505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c085015160208601510960408501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828408610204350892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028709086102243508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160038709086102443508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026435840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a43560208b01510908610204350894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c43560208c015109086102243508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e43560208c015109086102443508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028435860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151840992506001610264350394507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760870151860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151860961026087015190955091505f9050807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f026106a0018a0151880983098308915061028087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206001026106a0018a015188098309830891506102a087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206002026106a0018a015188098309830891506102c087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206003026106a0018a015188098309830891506102e087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206004026106a0018a0151880983098308915061030087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206005026106a0018a015188098309830891505080610380870152505050505050565b6040518151815260208201516020820152825160408201526020830151606082015260408260808360066107d05a03fa905080610dfe575f805260205ff35b5f604051833581526020840135602082015284604082015260408160608360076107d05a03fa915081615135575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa91505080615164575f805260205ff35b50505050565b5f60405183815284602082015285604082015260408160608360076107d05a03fa91508161519a575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915050806151c9575f805260205ff35b5050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101608601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806104e0850151830984510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180610500850151830984517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908009097f2b2e45f5cc9fcd40390415fe6f5c6f2f410c781ec6946e45dec011c588e35f706103a08501527f2564b62a9cb6f1a55f51bda397195f2c0d8ec2c392d46e8563632fc015dfbf9060206103a0018501526156208360046103a08701615100565b6156308160446103a08701615100565b6156bd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161038088015185097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161036089015188090861034087015108600260016103e0880161516a565b50610dfe8160846104208601615100565b604051610400820180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479081038190069091526104408301805182039190910690525f906157256103e084016103a085016150c1565b61573761042084016103a085016150c1565b61574b606084015160c46103a08601615100565b6103a083015181526103c08301516020808301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a083015260c43560c08301527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760e43581030660e08301527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6101008301527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6101208301527f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c026101408301527f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e48610160830152816101808160086107d05a03fa90511692915050565b60405161078081016040526158f3610e03565b6158fd8382610eed565b615906816123ad565b61590f8161286e565b61591983826128a7565b61592281612906565b61592b81613e54565b61593481614549565b61593d816151d0565b615946816156ce565b9050805f5260205ff35b5f80610320808486031215615963575f80fd5b610300840185811115615974575f80fd5b849350858286011115615985575f80fd5b8092505050925092905056fea2646970667358221220f9204a6729ab3cfd7d008e42e9e609c5982c2ce36f4db2fdd5da2d7ad03d505064736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639121da8a1461002d575b5f80fd5b61004061003b366004615950565b610054565b604051901515815260200160405180910390f35b5f6158e0565b6040516104c08201518082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610500840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610520840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610620840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061062001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a0840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001840151820990508082526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760840151820990508082526102e4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830960011461050e575f805260205ff35b8091506020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161076085015183099150806107608501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06106a001850151830991508060a06106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806106a001850151830991508060806106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106a001850151830991508060606106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106a001850151830991508060406106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106a001850151830991508060206106a0018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016106a085015183099150806106a08501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606106200185015183099150806060610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406106200185015183099150806040610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206106200185015183099150806020610620018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161062085015183099150806106208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e061052001850151830991508060e0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c061052001850151830991508060c0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a061052001850151830991508060a0610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806105200185015183099150806080610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160606105200185015183099150806060610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160406105200185015183099150806040610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206105200185015183099150806020610520018501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161052085015183099150806105208501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161050085015183099150806105008501526020830392507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018351830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104e085015183099150806104e085015250806104c0840152505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110610d72575f805260205ff35b50565b803560208201357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478085860985090891507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478182099050808214610dfe575f805260205ff35b505050565b610e0d6004610d75565b610e176044610d75565b610e216084610d75565b610e2b60c4610d75565b610e3761010435610d43565b610e4361012435610d43565b610e4f61014435610d43565b610e5b61016435610d43565b610e6761018435610d43565b610e736101a435610d43565b610e7f6101c435610d43565b610e8b6101e435610d43565b610e9761020435610d43565b610ea361022435610d43565b610eaf61024435610d43565b610ebb61026435610d43565b610ec761028435610d43565b610ed36102a435610d43565b610edf6102c435610d43565b610eeb6102e435610d43565b565b7f2b2e45f5cc9fcd40390415fe6f5c6f2f410c781ec6946e45dec011c588e35f7061078082019081527f2564b62a9cb6f1a55f51bda397195f2c0d8ec2c392d46e8563632fc015dfbf906107a0830190815283356107c084019081526004356107e085015260243561080085015260a083207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908190066020808701918252902081900660408601819052845260443590925260643590526060909120819006608083018190529081800960a0830181905260808301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8060e0840151096101008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f70363660e0840151096101208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f1d59376149b959ccbd157ac850893a6f07c2d99b3852513ab8d01be8e846a56660e0840151096101408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000060e0840151096101608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0530d09118705106cbb4a786ead16926d5d174e181a26686af5448492e42a18160e0840151096101808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb60e0840151096101a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f130b17119778465cfb3acaee30f81dee20710ead41671f568b11d9ab07b95a9b60e0840151096101c083015260e08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019080096101e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd841045cea24f6fd736bec231204708f7036366101e0840151096102008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006101e0840151096102208301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a91758cb49c3517c4604a520cff123608fc9cb6101e0840151096102408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08301516101e0840151096102608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f23610260840151096102808301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd610260840151096102a08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f283ce45a2e5b8e4e78f9fbaf5f6a348bfcfaf76dd28e5ca7121b74ef68fdec2e610260840151096102c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029048b6e193fd84104cc37a73fec2bc5e9b8ca0b2d36636f236102c0840151096102e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000177b3c4d79d41a917585bfc41088d8daaa78b17ea66b99c90dd6102c0840151096103008301526102608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081818009098060c08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018182097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000909101066104a084018190526104c0840152506107808201526101e06101046107a083013761020061078082019081207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019081900680845282526084356107a084015260a4356107c08401526060918290200691015250565b60e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018160080960e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105208601526101c08501516101008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105408601526101a08501516101208601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105608601526101808501516101408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961058086015261016085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105a08601526101408501516101808601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105c08601526101208501516101a08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096105e08601526101008501516101c08601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830960e0610520018601525050505050565b6101e0810151606082015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001816004096101e0850151935090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183810381900683087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106208601526102408501516102008601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828609830961064086015261022085015193507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001848103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096106608601526102008501516102408601519094507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006840890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082860983096060610620018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c0870151097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030660c0850151087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151600309096102608301517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181810381900684087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106a08601526102a08501516102808601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096106c08601526102808501516102a08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960406106a0018601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c08801517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103067f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08a015109087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c0880151600309096102c086015190935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001828103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107008601526103008501516102e08601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840984096107208601526102e08501516103008601519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103819006850890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828409840960a06106a0018601525050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806104e08401527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102608501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102e08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016103008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840882099050806105008401526127f583611944565b6127fe83611d8c565b61280783611fa2565b505060c081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000083018190066301000000096107608401525050610d728161005a565b6104a08101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181610760840151096107608301525050565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185356107608601510983030106905080610320830152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820860e08301519091505f9081807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f61052001890151880984098508935061010086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001602061052001890151880984098508935061012086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604061052001890151880984098508935061014086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001606061052001890151880984098508935061016086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001608061052001890151880984098508935061018086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a06105200189015188098409850893506101a086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c06105200189015188098409850893506101c086015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180846101243509610104350891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101443509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101843509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101a43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101c43509830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101e4350983089150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e0610520018801518709830984089250505080610340840152505050565b600160608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183099150507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306820890505f6102043561022435610244357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183610104350993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180836101243509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018486096101443509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180826101643509850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161018435850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610320870151850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c087015185096101e08701519094505f908490827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f02610620018d01518c098509850893508692506102008a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600102610620018d01518c098509850893508692506102208a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185850909840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600202610620018d01518c098509850893508692506102408a015191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878409840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180868309840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180897f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001858509098408925050507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020600302610620018b01518a09830983089150508061036088015250505050505050565b606081015160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181840990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60c08901510908820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306830860c08501519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190817f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b82090990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089150505f91505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c085015160208601510960408501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828408610204350892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028709086102243508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160038709086102443508840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026435840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a43560208b01510908610204350894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c43560208c015109086102243508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e43560208c015109086102443508860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028435860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010306840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151840992506001610264350394507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610760870151860994507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016104c0870151860961026087015190955091505f9050807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160205f026106a0018a0151880983098308915061028087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206001026106a0018a015188098309830891506102a087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180878509610264350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180857f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206002026106a0018a015188098309830891506102c087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206003026106a0018a015188098309830891506102e087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206004026106a0018a0151880983098308915061030087015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102a4358509610284350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806102c4357f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186870909820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160206005026106a0018a015188098309830891505080610380870152505050505050565b6040518151815260208201516020820152825160408201526020830151606082015260408260808360066107d05a03fa905080610dfe575f805260205ff35b5f604051833581526020840135602082015284604082015260408160608360076107d05a03fa915081615135575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa91505080615164575f805260205ff35b50505050565b5f60405183815284602082015285604082015260408160608360076107d05a03fa91508161519a575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915050806151c9575f805260205ff35b5050505050565b60608101517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060e08401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001030682087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101008601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101208601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101408601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101608601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08601517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103068408820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806104e0850151830984510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180610500850151830984517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908009097f2b2e45f5cc9fcd40390415fe6f5c6f2f410c781ec6946e45dec011c588e35f706103a08501527f2564b62a9cb6f1a55f51bda397195f2c0d8ec2c392d46e8563632fc015dfbf9060206103a0018501526156208360046103a08701615100565b6156308160446103a08701615100565b6156bd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161038088015185097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161036089015188090861034087015108600260016103e0880161516a565b50610dfe8160846104208601615100565b604051610400820180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479081038190069091526104408301805182039190910690525f906157256103e084016103a085016150c1565b61573761042084016103a085016150c1565b61574b606084015160c46103a08601615100565b6103a083015181526103c08301516020808301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a083015260c43560c08301527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760e43581030660e08301527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6101008301527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6101208301527f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c026101408301527f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e48610160830152816101808160086107d05a03fa90511692915050565b60405161078081016040526158f3610e03565b6158fd8382610eed565b615906816123ad565b61590f8161286e565b61591983826128a7565b61592281612906565b61592b81613e54565b61593481614549565b61593d816151d0565b615946816156ce565b9050805f5260205ff35b5f80610320808486031215615963575f80fd5b610300840185811115615974575f80fd5b849350858286011115615985575f80fd5b8092505050925092905056fea2646970667358221220f9204a6729ab3cfd7d008e42e9e609c5982c2ce36f4db2fdd5da2d7ad03d505064736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonRollupManager.json b/compiled-contracts/PolygonRollupManager.json index a65f1c14c..ee90e4f69 100644 --- a/compiled-contracts/PolygonRollupManager.json +++ b/compiled-contracts/PolygonRollupManager.json @@ -1965,8 +1965,8 @@ "type": "function" } ], - "bytecode": "0x60e060405234801562000010575f80fd5b5060405162005fb638038062005fb6833981016040819052620000339162000136565b6001600160a01b0380841660805282811660c052811660a052620000566200005f565b50505062000187565b5f54610100900460ff1615620000cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156200011c575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000133575f80fd5b50565b5f805f6060848603121562000149575f80fd5b835162000156816200011e565b602085015190935062000169816200011e565b60408501519092506200017c816200011e565b809150509250925092565b60805160a05160c051615dcc620001ea5f395f8181610ac0015281816122b00152613bf201525f818161087b01528181612e8b0152613ef601525f8181610a1a015281816112fa015281816114be015281816120250152613deb0152615dcc5ff3fe608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000aba578063f34eb8eb1462000ae2578063f4e926751462000af9578063f9c4c2ae1462000b0a575f80fd5b8063dbc169761462000a7e578063dde0ff771462000a88578063e0bfd3d21462000aa3575f80fd5b8063d02103ca11620000eb578063d02103ca1462000a14578063d5073f6f1462000a3c578063d547741f1462000a53578063d939b3151462000a6a575f80fd5b8063c1acbc3414620009ba578063c4c928c214620009d5578063ceee281d14620009ec575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d99146200086b578063a3c573eb1462000875578063afd23cbe14620008b6578063b99d0ad714620008e0575f80fd5b80639c9f3dfe1462000835578063a066215c146200084c578063a217fddf1462000863575f80fd5b806391d1485411620001bb57806391d1485414620007d957806399f5634e14620008145780639a908e73146200081e575f80fd5b8063841b24d7146200079057806387c20c0114620007ab5780638bd4f07114620007c2575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000714578063727885e9146200072b5780637975fcfe14620007425780637fb6e76a1462000768575f80fd5b806355a71ee0146200061957806360469169146200065c57806365c0504d1462000666575f80fd5b806336568abe116200029757806336568abe14620005e2578063394218e914620005f9578063477fa2701462000610575f80fd5b80632528016914620005035780632f2ff15d14620005b757806330c27dde14620005ce575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae14620004875780631816b7e514620004ae5780632072f6c514620004c5578063248a9ca314620004cf575f80fd5b80631489ed10146200044b57806315064c9614620004625780631608859c1462000470575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040257806311f6b287146200041d57806312b86e191462000434575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003da575b5f80fd5b620003a7620003a13660046200490d565b62000c20565b005b608454620003bd906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b620003f1620003eb366004620049f6565b620011ed565b6040519015158152602001620003d1565b608554620003bd90600160401b90046001600160401b031681565b620003bd6200042e36600462004a2c565b62001216565b620003a76200044536600462004a5a565b62001235565b620003a76200045c36600462004aec565b620013f9565b606f54620003f19060ff1681565b620003a762000481366004620049f6565b620015a3565b607e54620004989063ffffffff1681565b60405163ffffffff9091168152602001620003d1565b620003a7620004bf36600462004b71565b6200164d565b620003a76200170a565b620004f4620004e036600462004b9b565b5f9081526034602052604090206001015490565b604051908152602001620003d1565b6200058362000514366004620049f6565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003d1565b620003a7620005c836600462004bb3565b620017e6565b608754620003bd906001600160401b031681565b620003a7620005f336600462004bb3565b6200180e565b620003a76200060a36600462004be4565b62001848565b608654620004f4565b620004f46200062a366004620049f6565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b620004f46200190d565b620006ca6200067736600462004a2c565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003d1565b620003a76200072536600462004a2c565b62001924565b620003a76200073c36600462004ca4565b62001a1e565b620007596200075336600462004d6a565b62001e7b565b604051620003d1919062004e1d565b620004986200077936600462004be4565b60836020525f908152604090205463ffffffff1681565b608454620003bd90600160c01b90046001600160401b031681565b620003a7620007bc36600462004aec565b62001ead565b620003a7620007d336600462004a5a565b620021d8565b620003f1620007ea36600462004bb3565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620004f46200228f565b620003bd6200082f36600462004e31565b62002370565b620003a76200084636600462004be4565b6200253c565b620003a76200085d36600462004be4565b620025f3565b620004f45f81565b620004f4620026a9565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001620003d1565b608554620008cc90600160801b900461ffff1681565b60405161ffff9091168152602001620003d1565b62000975620008f1366004620049f6565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d191905f6080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003bd90600160801b90046001600160401b031681565b620003a7620009e636600462004e5c565b62002a71565b62000498620009fd36600462004eed565b60826020525f908152604090205463ffffffff1681565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000a4d36600462004b9b565b62002d6d565b620003a762000a6436600462004bb3565b62002e09565b608554620003bd906001600160401b031681565b620003a762002e31565b608454620003bd90600160401b90046001600160401b031681565b620003a762000ab436600462004f1c565b62002efd565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000af336600462004f94565b62002fd1565b608054620004989063ffffffff1681565b62000ba062000b1b36600462004a2c565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d1565b5f54600290610100900460ff1615801562000c4157505f5460ff8083169116105b62000cb95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d4c620031c5565b62000d787f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003231565b62000d845f8862003231565b62000db07fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003231565b62000ddc7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003231565b62000e087f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003231565b62000e347fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003231565b62000e607fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003231565b62000e8c7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003231565b62000eb87fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003231565b62000f047f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200323d565b62000f307f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003231565b62000f5c7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003231565b62000fa87f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200323d565b62000fd47f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003231565b620010007f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003231565b6073546074546001600160401b03600160401b909204821691168082146200103b57604051632e4cc54360e11b815260040160405180910390fd5b5f62001060888888885f60745f9054906101000a90046001600160401b031662003287565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a1667ffffffffffffffff198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a5946200116694938316936b01000000000000000000000090049092169160769160779190600401620050cd565b5f604051808303815f87803b1580156200117e575f80fd5b505af115801562001191573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249893506020019150620011d89050565b60405180910390a15050505050505050505050565b63ffffffff82165f9081526081602052604081206200120d9083620034a8565b90505b92915050565b63ffffffff81165f9081526081602052604081206200121090620034ec565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001261816200355b565b63ffffffff89165f90815260816020526040902062001287818a8a8a8a8a8a8a62003567565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012f8576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001331620026a9565b6040518263ffffffff1660e01b81526004016200135091815260200190565b5f604051808303815f87803b15801562001368575f80fd5b505af11580156200137b573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001425816200355b565b63ffffffff89165f9081526081602052604090206200144b818a8a8a8a8a8a8a620038f5565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b90041615620014bc576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014f5620026a9565b6040518263ffffffff1660e01b81526004016200151491815260200190565b5f604051808303815f87803b1580156200152c575f80fd5b505af11580156200153f573d5f803e3d5ffd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200163c57606f5460ff16156200161257604051630bc011ff60e21b815260040160405180910390fd5b6200161e8183620034a8565b6200163c57604051630674f25160e11b815260040160405180910390fd5b62001648818362003d08565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001679816200355b565b6103e88261ffff1610806200169357506103ff8261ffff16115b15620016b257604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff16620017da57608454600160801b90046001600160401b031615806200178b57506084544290620017809062093a8090600160801b90046001600160401b031662005135565b6001600160401b0316115b80620017bb57506087544290620017b09062093a80906001600160401b031662005135565b6001600160401b0316115b15620017da5760405163692baaad60e11b815260040160405180910390fd5b620017e462003ef4565b565b5f8281526034602052604090206001015462001802816200355b565b62001648838362003f6e565b6001600160a01b03811633146200183857604051630b4ad1cd60e31b815260040160405180910390fd5b62001844828262003ff2565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001874816200355b565b606f5460ff16620018b6576084546001600160401b03600160c01b909104811690831610620018b65760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001620016fe565b5f60865460646200191f91906200515f565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001950816200355b565b63ffffffff821615806200196f5750607e5463ffffffff908116908316115b156200198e57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff1615159003620019d457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001a4a816200355b565b63ffffffff8816158062001a695750607e5463ffffffff908116908916115b1562001a8857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001ace57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001b0b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001b259063ffffffff1662005179565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001b7290620048d3565b62001b80939291906200519e565b604051809103905ff08015801562001b9a573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001dfe949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001e3e908d908d9088908e908e908e90600401620051d4565b5f604051808303815f87803b15801562001e56575f80fd5b505af115801562001e69573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001ea290878787878762004074565b979650505050505050565b606f5460ff161562001ed257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001f2092600160c01b90048116911662005135565b6001600160401b0316111562001f4957604051638a0704d360e01b815260040160405180910390fd5b6103e862001f58888862005236565b6001600160401b0316111562001f8157604051635acfba9d60e11b815260040160405180910390fd5b62001f938189898989898989620038f5565b62001f9f8187620041cb565b6085546001600160401b03165f03620020b05760068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562002023576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d6200205c620026a9565b6040518263ffffffff1660e01b81526004016200207b91815260200190565b5f604051808303815f87803b15801562002093575f80fd5b505af1158015620020a6573d5f803e3d5ffd5b5050505062002179565b620020bb81620043c2565b600681018054600160801b90046001600160401b0316906010620020df8362005259565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620021fd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002223818989898989898962003567565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200228462003ef4565b505050505050505050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015620022f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231c919062005277565b6084549091505f9062002342906001600160401b03600160401b82048116911662005236565b6001600160401b03169050805f036200235d575f9250505090565b620023698183620052a3565b9250505090565b606f545f9060ff16156200239757604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023ce576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023f857604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242a9084906001600160401b031662005135565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200245f878362005135565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024ee83620043c2565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002568816200355b565b606f5460ff16620025a3576085546001600160401b0390811690831610620025a35760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001620016fe565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200261f816200355b565b62015180826001600160401b031611156200264d57604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001620016fe565b6080545f9063ffffffff16808203620026c357505f919050565b5f816001600160401b03811115620026df57620026df62004c00565b60405190808252806020026020018201604052801562002709578160200160208202803683370190505b5090505f5b82811015620027795760815f62002727836001620052b9565b63ffffffff1663ffffffff1681526020019081526020015f2060050154828281518110620027595762002759620052cf565b6020908102919091010152806200277081620052e3565b9150506200270e565b505f60205b83600114620029d1575f62002795600286620052fe565b620027a2600287620052a3565b620027ae9190620052b9565b90505f816001600160401b03811115620027cc57620027cc62004c00565b604051908082528060200260200182016040528015620027f6578160200160208202803683370190505b5090505f5b828110156200297d576200281160018462005314565b811480156200282c575062002828600288620052fe565b6001145b15620028b45785620028408260026200515f565b81518110620028535762002853620052cf565b60200260200101518560405160200162002877929190918252602082015260400190565b60405160208183030381529060405280519060200120828281518110620028a257620028a2620052cf565b60200260200101818152505062002968565b85620028c28260026200515f565b81518110620028d557620028d5620052cf565b602002602001015186826002620028ed91906200515f565b620028fa906001620052b9565b815181106200290d576200290d620052cf565b602002602001015160405160200162002930929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200295b576200295b620052cf565b6020026020010181815250505b806200297481620052e3565b915050620027fb565b508094508195508384604051602001620029a1929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620029c6906200532a565b93505050506200277e565b5f835f81518110620029e757620029e7620052cf565b602002602001015190505f5b8281101562002a6757604080516020810184905290810185905260600160408051601f1981840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002a5e90620052e3565b915050620029f3565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002a9d816200355b565b63ffffffff8416158062002abc5750607e5463ffffffff908116908516115b1562002adb57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002b1b576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b6957604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002baf57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002bed57604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b199091161790555f62002c928462001216565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002ce89216908b908b9060040162005342565b5f604051808303815f87803b15801562002d00575f80fd5b505af115801562002d13573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002d99816200355b565b683635c9adc5dea0000082118062002db45750633b9aca0082105b1562002dd357604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016fe565b5f8281526034602052604090206001015462002e25816200355b565b62001648838362003ff2565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002e5d816200355b565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002ed9575f80fd5b505af115801562002eec573d5f803e3d5ffd5b5050505062002efa6200448b565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002f29816200355b565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002f66576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002fa357604051630d409b9360e41b815260040160405180910390fd5b5f62002fb488888888875f62003287565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002ffd816200355b565b607e80545f91908290620030179063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620031b39695949392919062005380565b60405180910390a25050505050505050565b5f54610100900460ff16620017e45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000cb0565b62001844828262003f6e565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620032a29063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620034959594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034da92918116911662005135565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200353e575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002efa8133620044e3565b60078801545f906001600160401b0390811690871610156200359c5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200363c5760068901546001600160401b03600160801b90910481169089161115620035e65760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200363557604051632bd2e3e760e01b815260040160405180910390fd5b50620036b0565b506001600160401b0385165f9081526002890160205260409020548062003676576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620036b057604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036e95750876001600160401b0316876001600160401b031611155b806200370d575060068901546001600160401b03600160c01b909104811690881611155b156200372c5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b900481169086161462003772576040516332a2a77f60e01b815260040160405180910390fd5b5f620037838a888888868962004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037b99190620053d7565b602060405180830381855afa158015620037d5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190620037fa919062005277565b620038069190620052fe565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200384a91889190600401620053f4565b602060405180830381865afa15801562003866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200388c919062005430565b620038aa576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038e85760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f80620039028a620034ec565b60078b01549091506001600160401b039081169089161015620039385760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039da5760068a01546001600160401b03600160801b9091048116908a161115620039825760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620039d357604051632bd2e3e760e01b815260040160405180910390fd5b5062003a49565b6001600160401b0388165f90815260028b01602052604090205491508162003a15576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b0316111562003a4957604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b03161162003a7c5760405163b9b18f5760e01b815260040160405180910390fd5b5f62003a8d8b8a8a8a878b62004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ac39190620053d7565b602060405180830381855afa15801562003adf573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003b04919062005277565b62003b109190620052fe565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003b5491899190600401620053f4565b602060405180830381865afa15801562003b70573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003b96919062005430565b62003bb4576040516309bde33960e01b815260040160405180910390fd5b5f62003bc1848b62005236565b905062003c1a87826001600160401b031662003bdc6200228f565b62003be891906200515f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919062004526565b80608460088282829054906101000a90046001600160401b031662003c40919062005135565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003ce2575f80fd5b505af115801562003cf5573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003d47575060068201546001600160401b03600160801b9091048116908216115b1562003d665760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f8181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003e22620026a9565b6040518263ffffffff1660e01b815260040162003e4191815260200190565b5f604051808303815f87803b15801562003e59575f80fd5b505af115801562003e6c573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003f4d575f80fd5b505af115801562003f60573d5f803e3d5ffd5b50505050620017e46200458f565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff1662001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff161562001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f8181526003890160205260408082205493881682529020546060929115801590620040a9575081155b15620040c85760405163340c614f60e11b815260040160405180910390fd5b80620040e7576040516366385b5160e01b815260040160405180910390fd5b620040f284620045eb565b62004110576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f620041d783620034ec565b9050815f80620041e8848462005236565b6085546001600160401b0391821692505f916200420e91600160401b9004164262005314565b90505b846001600160401b0316846001600160401b03161462004297576001600160401b038085165f9081526003890160205260409020600181015490911682101562004272576001810154600160401b90046001600160401b0316945062004290565b6200427e868662005236565b6001600160401b031693505062004297565b5062004211565b5f620042a4848462005314565b9050838110156200430257808403600c8111620042c25780620042c5565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620042f757620042f76200528f565b046086555062004379565b838103600c811162004315578062004318565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a764000002816200435157620043516200528f565b04905080608654670de0b6b3a764000002816200437257620043726200528f565b0460865550505b683635c9adc5dea000006086541115620043a057683635c9adc5dea00000608655620043b8565b633b9aca006086541015620043b857633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002efa5760068101545f906200440c90600160c01b90046001600160401b0316600162005135565b90506200441a8282620034a8565b15620018445760068201545f9060029062004447908490600160801b90046001600160401b031662005236565b62004453919062005451565b6200445f908362005135565b90506200446d8382620034a8565b156200447f5762001648838262003d08565b62001648838362003d08565b606f5460ff16620044af57604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff166200184457604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620016489084906200466f565b606f5460ff1615620045b457604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b03831610801562004621575067ffffffff00000001604083901c6001600160401b0316105b801562004642575067ffffffff00000001608083901c6001600160401b0316105b80156200465a575067ffffffff0000000160c083901c105b156200466857506001919050565b505f919050565b5f620046c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620047479092919063ffffffff16565b805190915015620016485780806020019051810190620046e6919062005430565b620016485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000cb0565b60606200475784845f856200475f565b949350505050565b606082471015620047c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000cb0565b5f80866001600160a01b03168587604051620047df9190620053d7565b5f6040518083038185875af1925050503d805f81146200481b576040519150601f19603f3d011682016040523d82523d5f602084013e62004820565b606091505b509150915062001ea28783838760608315620048a05782515f0362004898576001600160a01b0385163b620048985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000cb0565b508162004757565b620047578383815115620048b75781518083602001fd5b8060405162461bcd60e51b815260040162000cb0919062004e1d565b61091d806200547a83390190565b6001600160a01b038116811462002efa575f80fd5b80356001600160401b038116811462003556575f80fd5b5f805f805f805f805f806101408b8d03121562004928575f80fd5b8a356200493581620048e1565b99506200494560208c01620048f6565b98506200495560408c01620048f6565b975060608b01356200496781620048e1565b965060808b01356200497981620048e1565b955060a08b01356200498b81620048e1565b945060c08b01356200499d81620048e1565b935060e08b0135620049af81620048e1565b9250620049c06101008c01620048f6565b9150620049d16101208c01620048f6565b90509295989b9194979a5092959850565b803563ffffffff8116811462003556575f80fd5b5f806040838503121562004a08575f80fd5b62004a1383620049e2565b915062004a2360208401620048f6565b90509250929050565b5f6020828403121562004a3d575f80fd5b6200120d82620049e2565b80610300810183101562001210575f80fd5b5f805f805f805f806103e0898b03121562004a73575f80fd5b62004a7e89620049e2565b975062004a8e60208a01620048f6565b965062004a9e60408a01620048f6565b955062004aae60608a01620048f6565b945062004abe60808a01620048f6565b935060a0890135925060c0890135915062004add8a60e08b0162004a48565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004b05575f80fd5b62004b1089620049e2565b975062004b2060208a01620048f6565b965062004b3060408a01620048f6565b955062004b4060608a01620048f6565b94506080890135935060a0890135925060c089013562004b6081620048e1565b915062004add8a60e08b0162004a48565b5f6020828403121562004b82575f80fd5b813561ffff8116811462004b94575f80fd5b9392505050565b5f6020828403121562004bac575f80fd5b5035919050565b5f806040838503121562004bc5575f80fd5b82359150602083013562004bd981620048e1565b809150509250929050565b5f6020828403121562004bf5575f80fd5b6200120d82620048f6565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262004c24575f80fd5b81356001600160401b038082111562004c415762004c4162004c00565b604051601f8301601f19908116603f0116810190828211818310171562004c6c5762004c6c62004c00565b8160405283815286602085880101111562004c85575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562004cbb575f80fd5b62004cc688620049e2565b965062004cd660208901620048f6565b9550604088013562004ce881620048e1565b9450606088013562004cfa81620048e1565b9350608088013562004d0c81620048e1565b925060a08801356001600160401b038082111562004d28575f80fd5b62004d368b838c0162004c14565b935060c08a013591508082111562004d4c575f80fd5b5062004d5b8a828b0162004c14565b91505092959891949750929550565b5f805f805f8060c0878903121562004d80575f80fd5b62004d8b87620049e2565b955062004d9b60208801620048f6565b945062004dab60408801620048f6565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004de857818101518382015260200162004dce565b50505f910152565b5f815180845262004e0981602086016020860162004dcc565b601f01601f19169290920160200192915050565b602081525f6200120d602083018462004df0565b5f806040838503121562004e43575f80fd5b62004e4e83620048f6565b946020939093013593505050565b5f805f806060858703121562004e70575f80fd5b843562004e7d81620048e1565b935062004e8d60208601620049e2565b925060408501356001600160401b038082111562004ea9575f80fd5b818701915087601f83011262004ebd575f80fd5b81358181111562004ecc575f80fd5b88602082850101111562004ede575f80fd5b95989497505060200194505050565b5f6020828403121562004efe575f80fd5b813562004b9481620048e1565b803560ff8116811462003556575f80fd5b5f805f805f8060c0878903121562004f32575f80fd5b863562004f3f81620048e1565b9550602087013562004f5181620048e1565b945062004f6160408801620048f6565b935062004f7160608801620048f6565b92506080870135915062004f8860a0880162004f0b565b90509295509295509295565b5f805f805f8060c0878903121562004faa575f80fd5b863562004fb781620048e1565b9550602087013562004fc981620048e1565b945062004fd960408801620048f6565b935062004fe96060880162004f0b565b92506080870135915060a08701356001600160401b038111156200500b575f80fd5b6200501989828a0162004c14565b9150509295509295509295565b80545f90600181811c90808316806200504057607f831692505b602080841082036200506057634e487b7160e01b5f52602260045260245ffd5b838852602088018280156200507e57600181146200509557620050c0565b60ff198716825285151560051b82019750620050c0565b5f898152602090205f5b87811015620050ba578154848201529086019084016200509f565b83019850505b5050505050505092915050565b5f6001600160a01b03808816835280871660208401525060a06040830152620050fa60a083018662005026565b82810360608401526200510e818662005026565b9150508260808301529695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111562005158576200515862005121565b5092915050565b808202811582820484141762001210576200121062005121565b5f63ffffffff80831681810362005194576200519462005121565b6001019392505050565b5f6001600160a01b03808616835280851660208401525060606040830152620051cb606083018462004df0565b95945050505050565b5f6001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200521560c083018562004df0565b82810360a084015262005229818562004df0565b9998505050505050505050565b6001600160401b0382811682821603908082111562005158576200515862005121565b5f6001600160401b0380831681810362005194576200519462005121565b5f6020828403121562005288575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82620052b457620052b46200528f565b500490565b8082018082111562001210576200121062005121565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620052f757620052f762005121565b5060010190565b5f826200530f576200530f6200528f565b500690565b8181038181111562001210576200121062005121565b5f816200533b576200533b62005121565b505f190190565b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f6001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a0830152620053cb60c083018462004df0565b98975050505050505050565b5f8251620053ea81846020870162004dcc565b9190910192915050565b6103208101610300808584378201835f5b60018110156200542657815183526020928301929091019060010162005405565b5050509392505050565b5f6020828403121562005441575f80fd5b8151801515811462004b94575f80fd5b5f6001600160401b03808416806200546d576200546d6200528f565b9216919091049291505056fe60a06040526040516200091d3803806200091d833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f80516020620008fd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f80516020620008fd83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b608051610479620004845f395f601001526104795ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610081575f357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007957610077610085565b565b610077610095565b6100775b6100776100906100c3565b6100fa565b5f806100a43660048184610313565b8101906100b1919061034e565b915091506100bf8282610118565b5050565b5f6100f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e808015610114573d5ff35b3d5ffd5b61012182610172565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561016a5761016582826101fa565b505050565b6100bf61026c565b806001600160a01b03163b5f036101ac57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516102169190610417565b5f60405180830381855af49150503d805f811461024e576040519150601f19603f3d011682016040523d82523d5f602084013e610253565b606091505b509150915061026385838361028b565b95945050505050565b34156100775760405163b398979f60e01b815260040160405180910390fd5b6060826102a05761029b826102ea565b6102e3565b81511580156102b757506001600160a01b0384163b155b156102e057604051639996b31560e01b81526001600160a01b03851660048201526024016101a3565b50805b9392505050565b8051156102fa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8085851115610321575f80fd5b8386111561032d575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561035f575f80fd5b82356001600160a01b0381168114610375575f80fd5b9150602083013567ffffffffffffffff80821115610391575f80fd5b818501915085601f8301126103a4575f80fd5b8135818111156103b6576103b661033a565b604051601f8201601f19908116603f011681019083821181831017156103de576103de61033a565b816040528281528860208487010111156103f6575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610436576020818601810151858301520161041c565b505f92019182525091905056fea264697066735822122021e23b4641727aa4aa8fd2d3ef7960a43cab420d4c8632503bedc3eb2d30690764736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220e44c31f40e8863e278ad7aad94a497e0764f056da13a4ee3106a7db2c90d2b4064736f6c63430008140033", - "deployedBytecode": "0x608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000aba578063f34eb8eb1462000ae2578063f4e926751462000af9578063f9c4c2ae1462000b0a575f80fd5b8063dbc169761462000a7e578063dde0ff771462000a88578063e0bfd3d21462000aa3575f80fd5b8063d02103ca11620000eb578063d02103ca1462000a14578063d5073f6f1462000a3c578063d547741f1462000a53578063d939b3151462000a6a575f80fd5b8063c1acbc3414620009ba578063c4c928c214620009d5578063ceee281d14620009ec575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d99146200086b578063a3c573eb1462000875578063afd23cbe14620008b6578063b99d0ad714620008e0575f80fd5b80639c9f3dfe1462000835578063a066215c146200084c578063a217fddf1462000863575f80fd5b806391d1485411620001bb57806391d1485414620007d957806399f5634e14620008145780639a908e73146200081e575f80fd5b8063841b24d7146200079057806387c20c0114620007ab5780638bd4f07114620007c2575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000714578063727885e9146200072b5780637975fcfe14620007425780637fb6e76a1462000768575f80fd5b806355a71ee0146200061957806360469169146200065c57806365c0504d1462000666575f80fd5b806336568abe116200029757806336568abe14620005e2578063394218e914620005f9578063477fa2701462000610575f80fd5b80632528016914620005035780632f2ff15d14620005b757806330c27dde14620005ce575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae14620004875780631816b7e514620004ae5780632072f6c514620004c5578063248a9ca314620004cf575f80fd5b80631489ed10146200044b57806315064c9614620004625780631608859c1462000470575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040257806311f6b287146200041d57806312b86e191462000434575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003da575b5f80fd5b620003a7620003a13660046200490d565b62000c20565b005b608454620003bd906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b620003f1620003eb366004620049f6565b620011ed565b6040519015158152602001620003d1565b608554620003bd90600160401b90046001600160401b031681565b620003bd6200042e36600462004a2c565b62001216565b620003a76200044536600462004a5a565b62001235565b620003a76200045c36600462004aec565b620013f9565b606f54620003f19060ff1681565b620003a762000481366004620049f6565b620015a3565b607e54620004989063ffffffff1681565b60405163ffffffff9091168152602001620003d1565b620003a7620004bf36600462004b71565b6200164d565b620003a76200170a565b620004f4620004e036600462004b9b565b5f9081526034602052604090206001015490565b604051908152602001620003d1565b6200058362000514366004620049f6565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003d1565b620003a7620005c836600462004bb3565b620017e6565b608754620003bd906001600160401b031681565b620003a7620005f336600462004bb3565b6200180e565b620003a76200060a36600462004be4565b62001848565b608654620004f4565b620004f46200062a366004620049f6565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b620004f46200190d565b620006ca6200067736600462004a2c565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003d1565b620003a76200072536600462004a2c565b62001924565b620003a76200073c36600462004ca4565b62001a1e565b620007596200075336600462004d6a565b62001e7b565b604051620003d1919062004e1d565b620004986200077936600462004be4565b60836020525f908152604090205463ffffffff1681565b608454620003bd90600160c01b90046001600160401b031681565b620003a7620007bc36600462004aec565b62001ead565b620003a7620007d336600462004a5a565b620021d8565b620003f1620007ea36600462004bb3565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620004f46200228f565b620003bd6200082f36600462004e31565b62002370565b620003a76200084636600462004be4565b6200253c565b620003a76200085d36600462004be4565b620025f3565b620004f45f81565b620004f4620026a9565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001620003d1565b608554620008cc90600160801b900461ffff1681565b60405161ffff9091168152602001620003d1565b62000975620008f1366004620049f6565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d191905f6080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003bd90600160801b90046001600160401b031681565b620003a7620009e636600462004e5c565b62002a71565b62000498620009fd36600462004eed565b60826020525f908152604090205463ffffffff1681565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000a4d36600462004b9b565b62002d6d565b620003a762000a6436600462004bb3565b62002e09565b608554620003bd906001600160401b031681565b620003a762002e31565b608454620003bd90600160401b90046001600160401b031681565b620003a762000ab436600462004f1c565b62002efd565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000af336600462004f94565b62002fd1565b608054620004989063ffffffff1681565b62000ba062000b1b36600462004a2c565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d1565b5f54600290610100900460ff1615801562000c4157505f5460ff8083169116105b62000cb95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d4c620031c5565b62000d787f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003231565b62000d845f8862003231565b62000db07fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003231565b62000ddc7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003231565b62000e087f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003231565b62000e347fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003231565b62000e607fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003231565b62000e8c7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003231565b62000eb87fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003231565b62000f047f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200323d565b62000f307f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003231565b62000f5c7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003231565b62000fa87f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200323d565b62000fd47f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003231565b620010007f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003231565b6073546074546001600160401b03600160401b909204821691168082146200103b57604051632e4cc54360e11b815260040160405180910390fd5b5f62001060888888885f60745f9054906101000a90046001600160401b031662003287565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a1667ffffffffffffffff198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a5946200116694938316936b01000000000000000000000090049092169160769160779190600401620050cd565b5f604051808303815f87803b1580156200117e575f80fd5b505af115801562001191573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249893506020019150620011d89050565b60405180910390a15050505050505050505050565b63ffffffff82165f9081526081602052604081206200120d9083620034a8565b90505b92915050565b63ffffffff81165f9081526081602052604081206200121090620034ec565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001261816200355b565b63ffffffff89165f90815260816020526040902062001287818a8a8a8a8a8a8a62003567565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012f8576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001331620026a9565b6040518263ffffffff1660e01b81526004016200135091815260200190565b5f604051808303815f87803b15801562001368575f80fd5b505af11580156200137b573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001425816200355b565b63ffffffff89165f9081526081602052604090206200144b818a8a8a8a8a8a8a620038f5565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b90041615620014bc576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014f5620026a9565b6040518263ffffffff1660e01b81526004016200151491815260200190565b5f604051808303815f87803b1580156200152c575f80fd5b505af11580156200153f573d5f803e3d5ffd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200163c57606f5460ff16156200161257604051630bc011ff60e21b815260040160405180910390fd5b6200161e8183620034a8565b6200163c57604051630674f25160e11b815260040160405180910390fd5b62001648818362003d08565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001679816200355b565b6103e88261ffff1610806200169357506103ff8261ffff16115b15620016b257604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff16620017da57608454600160801b90046001600160401b031615806200178b57506084544290620017809062093a8090600160801b90046001600160401b031662005135565b6001600160401b0316115b80620017bb57506087544290620017b09062093a80906001600160401b031662005135565b6001600160401b0316115b15620017da5760405163692baaad60e11b815260040160405180910390fd5b620017e462003ef4565b565b5f8281526034602052604090206001015462001802816200355b565b62001648838362003f6e565b6001600160a01b03811633146200183857604051630b4ad1cd60e31b815260040160405180910390fd5b62001844828262003ff2565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001874816200355b565b606f5460ff16620018b6576084546001600160401b03600160c01b909104811690831610620018b65760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001620016fe565b5f60865460646200191f91906200515f565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001950816200355b565b63ffffffff821615806200196f5750607e5463ffffffff908116908316115b156200198e57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff1615159003620019d457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001a4a816200355b565b63ffffffff8816158062001a695750607e5463ffffffff908116908916115b1562001a8857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001ace57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001b0b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001b259063ffffffff1662005179565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001b7290620048d3565b62001b80939291906200519e565b604051809103905ff08015801562001b9a573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001dfe949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001e3e908d908d9088908e908e908e90600401620051d4565b5f604051808303815f87803b15801562001e56575f80fd5b505af115801562001e69573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001ea290878787878762004074565b979650505050505050565b606f5460ff161562001ed257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001f2092600160c01b90048116911662005135565b6001600160401b0316111562001f4957604051638a0704d360e01b815260040160405180910390fd5b6103e862001f58888862005236565b6001600160401b0316111562001f8157604051635acfba9d60e11b815260040160405180910390fd5b62001f938189898989898989620038f5565b62001f9f8187620041cb565b6085546001600160401b03165f03620020b05760068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562002023576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d6200205c620026a9565b6040518263ffffffff1660e01b81526004016200207b91815260200190565b5f604051808303815f87803b15801562002093575f80fd5b505af1158015620020a6573d5f803e3d5ffd5b5050505062002179565b620020bb81620043c2565b600681018054600160801b90046001600160401b0316906010620020df8362005259565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620021fd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002223818989898989898962003567565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200228462003ef4565b505050505050505050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015620022f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231c919062005277565b6084549091505f9062002342906001600160401b03600160401b82048116911662005236565b6001600160401b03169050805f036200235d575f9250505090565b620023698183620052a3565b9250505090565b606f545f9060ff16156200239757604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023ce576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023f857604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242a9084906001600160401b031662005135565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200245f878362005135565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024ee83620043c2565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002568816200355b565b606f5460ff16620025a3576085546001600160401b0390811690831610620025a35760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001620016fe565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200261f816200355b565b62015180826001600160401b031611156200264d57604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001620016fe565b6080545f9063ffffffff16808203620026c357505f919050565b5f816001600160401b03811115620026df57620026df62004c00565b60405190808252806020026020018201604052801562002709578160200160208202803683370190505b5090505f5b82811015620027795760815f62002727836001620052b9565b63ffffffff1663ffffffff1681526020019081526020015f2060050154828281518110620027595762002759620052cf565b6020908102919091010152806200277081620052e3565b9150506200270e565b505f60205b83600114620029d1575f62002795600286620052fe565b620027a2600287620052a3565b620027ae9190620052b9565b90505f816001600160401b03811115620027cc57620027cc62004c00565b604051908082528060200260200182016040528015620027f6578160200160208202803683370190505b5090505f5b828110156200297d576200281160018462005314565b811480156200282c575062002828600288620052fe565b6001145b15620028b45785620028408260026200515f565b81518110620028535762002853620052cf565b60200260200101518560405160200162002877929190918252602082015260400190565b60405160208183030381529060405280519060200120828281518110620028a257620028a2620052cf565b60200260200101818152505062002968565b85620028c28260026200515f565b81518110620028d557620028d5620052cf565b602002602001015186826002620028ed91906200515f565b620028fa906001620052b9565b815181106200290d576200290d620052cf565b602002602001015160405160200162002930929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200295b576200295b620052cf565b6020026020010181815250505b806200297481620052e3565b915050620027fb565b508094508195508384604051602001620029a1929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620029c6906200532a565b93505050506200277e565b5f835f81518110620029e757620029e7620052cf565b602002602001015190505f5b8281101562002a6757604080516020810184905290810185905260600160408051601f1981840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002a5e90620052e3565b915050620029f3565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002a9d816200355b565b63ffffffff8416158062002abc5750607e5463ffffffff908116908516115b1562002adb57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002b1b576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b6957604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002baf57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002bed57604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b199091161790555f62002c928462001216565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002ce89216908b908b9060040162005342565b5f604051808303815f87803b15801562002d00575f80fd5b505af115801562002d13573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002d99816200355b565b683635c9adc5dea0000082118062002db45750633b9aca0082105b1562002dd357604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016fe565b5f8281526034602052604090206001015462002e25816200355b565b62001648838362003ff2565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002e5d816200355b565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002ed9575f80fd5b505af115801562002eec573d5f803e3d5ffd5b5050505062002efa6200448b565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002f29816200355b565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002f66576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002fa357604051630d409b9360e41b815260040160405180910390fd5b5f62002fb488888888875f62003287565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002ffd816200355b565b607e80545f91908290620030179063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620031b39695949392919062005380565b60405180910390a25050505050505050565b5f54610100900460ff16620017e45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000cb0565b62001844828262003f6e565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620032a29063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620034959594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034da92918116911662005135565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200353e575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002efa8133620044e3565b60078801545f906001600160401b0390811690871610156200359c5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200363c5760068901546001600160401b03600160801b90910481169089161115620035e65760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200363557604051632bd2e3e760e01b815260040160405180910390fd5b50620036b0565b506001600160401b0385165f9081526002890160205260409020548062003676576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620036b057604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036e95750876001600160401b0316876001600160401b031611155b806200370d575060068901546001600160401b03600160c01b909104811690881611155b156200372c5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b900481169086161462003772576040516332a2a77f60e01b815260040160405180910390fd5b5f620037838a888888868962004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037b99190620053d7565b602060405180830381855afa158015620037d5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190620037fa919062005277565b620038069190620052fe565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200384a91889190600401620053f4565b602060405180830381865afa15801562003866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200388c919062005430565b620038aa576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038e85760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f80620039028a620034ec565b60078b01549091506001600160401b039081169089161015620039385760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039da5760068a01546001600160401b03600160801b9091048116908a161115620039825760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620039d357604051632bd2e3e760e01b815260040160405180910390fd5b5062003a49565b6001600160401b0388165f90815260028b01602052604090205491508162003a15576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b0316111562003a4957604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b03161162003a7c5760405163b9b18f5760e01b815260040160405180910390fd5b5f62003a8d8b8a8a8a878b62004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ac39190620053d7565b602060405180830381855afa15801562003adf573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003b04919062005277565b62003b109190620052fe565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003b5491899190600401620053f4565b602060405180830381865afa15801562003b70573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003b96919062005430565b62003bb4576040516309bde33960e01b815260040160405180910390fd5b5f62003bc1848b62005236565b905062003c1a87826001600160401b031662003bdc6200228f565b62003be891906200515f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919062004526565b80608460088282829054906101000a90046001600160401b031662003c40919062005135565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003ce2575f80fd5b505af115801562003cf5573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003d47575060068201546001600160401b03600160801b9091048116908216115b1562003d665760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f8181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003e22620026a9565b6040518263ffffffff1660e01b815260040162003e4191815260200190565b5f604051808303815f87803b15801562003e59575f80fd5b505af115801562003e6c573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003f4d575f80fd5b505af115801562003f60573d5f803e3d5ffd5b50505050620017e46200458f565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff1662001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff161562001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f8181526003890160205260408082205493881682529020546060929115801590620040a9575081155b15620040c85760405163340c614f60e11b815260040160405180910390fd5b80620040e7576040516366385b5160e01b815260040160405180910390fd5b620040f284620045eb565b62004110576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f620041d783620034ec565b9050815f80620041e8848462005236565b6085546001600160401b0391821692505f916200420e91600160401b9004164262005314565b90505b846001600160401b0316846001600160401b03161462004297576001600160401b038085165f9081526003890160205260409020600181015490911682101562004272576001810154600160401b90046001600160401b0316945062004290565b6200427e868662005236565b6001600160401b031693505062004297565b5062004211565b5f620042a4848462005314565b9050838110156200430257808403600c8111620042c25780620042c5565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620042f757620042f76200528f565b046086555062004379565b838103600c811162004315578062004318565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a764000002816200435157620043516200528f565b04905080608654670de0b6b3a764000002816200437257620043726200528f565b0460865550505b683635c9adc5dea000006086541115620043a057683635c9adc5dea00000608655620043b8565b633b9aca006086541015620043b857633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002efa5760068101545f906200440c90600160c01b90046001600160401b0316600162005135565b90506200441a8282620034a8565b15620018445760068201545f9060029062004447908490600160801b90046001600160401b031662005236565b62004453919062005451565b6200445f908362005135565b90506200446d8382620034a8565b156200447f5762001648838262003d08565b62001648838362003d08565b606f5460ff16620044af57604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff166200184457604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620016489084906200466f565b606f5460ff1615620045b457604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b03831610801562004621575067ffffffff00000001604083901c6001600160401b0316105b801562004642575067ffffffff00000001608083901c6001600160401b0316105b80156200465a575067ffffffff0000000160c083901c105b156200466857506001919050565b505f919050565b5f620046c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620047479092919063ffffffff16565b805190915015620016485780806020019051810190620046e6919062005430565b620016485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000cb0565b60606200475784845f856200475f565b949350505050565b606082471015620047c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000cb0565b5f80866001600160a01b03168587604051620047df9190620053d7565b5f6040518083038185875af1925050503d805f81146200481b576040519150601f19603f3d011682016040523d82523d5f602084013e62004820565b606091505b509150915062001ea28783838760608315620048a05782515f0362004898576001600160a01b0385163b620048985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000cb0565b508162004757565b620047578383815115620048b75781518083602001fd5b8060405162461bcd60e51b815260040162000cb0919062004e1d565b61091d806200547a83390190565b6001600160a01b038116811462002efa575f80fd5b80356001600160401b038116811462003556575f80fd5b5f805f805f805f805f806101408b8d03121562004928575f80fd5b8a356200493581620048e1565b99506200494560208c01620048f6565b98506200495560408c01620048f6565b975060608b01356200496781620048e1565b965060808b01356200497981620048e1565b955060a08b01356200498b81620048e1565b945060c08b01356200499d81620048e1565b935060e08b0135620049af81620048e1565b9250620049c06101008c01620048f6565b9150620049d16101208c01620048f6565b90509295989b9194979a5092959850565b803563ffffffff8116811462003556575f80fd5b5f806040838503121562004a08575f80fd5b62004a1383620049e2565b915062004a2360208401620048f6565b90509250929050565b5f6020828403121562004a3d575f80fd5b6200120d82620049e2565b80610300810183101562001210575f80fd5b5f805f805f805f806103e0898b03121562004a73575f80fd5b62004a7e89620049e2565b975062004a8e60208a01620048f6565b965062004a9e60408a01620048f6565b955062004aae60608a01620048f6565b945062004abe60808a01620048f6565b935060a0890135925060c0890135915062004add8a60e08b0162004a48565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004b05575f80fd5b62004b1089620049e2565b975062004b2060208a01620048f6565b965062004b3060408a01620048f6565b955062004b4060608a01620048f6565b94506080890135935060a0890135925060c089013562004b6081620048e1565b915062004add8a60e08b0162004a48565b5f6020828403121562004b82575f80fd5b813561ffff8116811462004b94575f80fd5b9392505050565b5f6020828403121562004bac575f80fd5b5035919050565b5f806040838503121562004bc5575f80fd5b82359150602083013562004bd981620048e1565b809150509250929050565b5f6020828403121562004bf5575f80fd5b6200120d82620048f6565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262004c24575f80fd5b81356001600160401b038082111562004c415762004c4162004c00565b604051601f8301601f19908116603f0116810190828211818310171562004c6c5762004c6c62004c00565b8160405283815286602085880101111562004c85575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562004cbb575f80fd5b62004cc688620049e2565b965062004cd660208901620048f6565b9550604088013562004ce881620048e1565b9450606088013562004cfa81620048e1565b9350608088013562004d0c81620048e1565b925060a08801356001600160401b038082111562004d28575f80fd5b62004d368b838c0162004c14565b935060c08a013591508082111562004d4c575f80fd5b5062004d5b8a828b0162004c14565b91505092959891949750929550565b5f805f805f8060c0878903121562004d80575f80fd5b62004d8b87620049e2565b955062004d9b60208801620048f6565b945062004dab60408801620048f6565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004de857818101518382015260200162004dce565b50505f910152565b5f815180845262004e0981602086016020860162004dcc565b601f01601f19169290920160200192915050565b602081525f6200120d602083018462004df0565b5f806040838503121562004e43575f80fd5b62004e4e83620048f6565b946020939093013593505050565b5f805f806060858703121562004e70575f80fd5b843562004e7d81620048e1565b935062004e8d60208601620049e2565b925060408501356001600160401b038082111562004ea9575f80fd5b818701915087601f83011262004ebd575f80fd5b81358181111562004ecc575f80fd5b88602082850101111562004ede575f80fd5b95989497505060200194505050565b5f6020828403121562004efe575f80fd5b813562004b9481620048e1565b803560ff8116811462003556575f80fd5b5f805f805f8060c0878903121562004f32575f80fd5b863562004f3f81620048e1565b9550602087013562004f5181620048e1565b945062004f6160408801620048f6565b935062004f7160608801620048f6565b92506080870135915062004f8860a0880162004f0b565b90509295509295509295565b5f805f805f8060c0878903121562004faa575f80fd5b863562004fb781620048e1565b9550602087013562004fc981620048e1565b945062004fd960408801620048f6565b935062004fe96060880162004f0b565b92506080870135915060a08701356001600160401b038111156200500b575f80fd5b6200501989828a0162004c14565b9150509295509295509295565b80545f90600181811c90808316806200504057607f831692505b602080841082036200506057634e487b7160e01b5f52602260045260245ffd5b838852602088018280156200507e57600181146200509557620050c0565b60ff198716825285151560051b82019750620050c0565b5f898152602090205f5b87811015620050ba578154848201529086019084016200509f565b83019850505b5050505050505092915050565b5f6001600160a01b03808816835280871660208401525060a06040830152620050fa60a083018662005026565b82810360608401526200510e818662005026565b9150508260808301529695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111562005158576200515862005121565b5092915050565b808202811582820484141762001210576200121062005121565b5f63ffffffff80831681810362005194576200519462005121565b6001019392505050565b5f6001600160a01b03808616835280851660208401525060606040830152620051cb606083018462004df0565b95945050505050565b5f6001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200521560c083018562004df0565b82810360a084015262005229818562004df0565b9998505050505050505050565b6001600160401b0382811682821603908082111562005158576200515862005121565b5f6001600160401b0380831681810362005194576200519462005121565b5f6020828403121562005288575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82620052b457620052b46200528f565b500490565b8082018082111562001210576200121062005121565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620052f757620052f762005121565b5060010190565b5f826200530f576200530f6200528f565b500690565b8181038181111562001210576200121062005121565b5f816200533b576200533b62005121565b505f190190565b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f6001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a0830152620053cb60c083018462004df0565b98975050505050505050565b5f8251620053ea81846020870162004dcc565b9190910192915050565b6103208101610300808584378201835f5b60018110156200542657815183526020928301929091019060010162005405565b5050509392505050565b5f6020828403121562005441575f80fd5b8151801515811462004b94575f80fd5b5f6001600160401b03808416806200546d576200546d6200528f565b9216919091049291505056fe60a06040526040516200091d3803806200091d833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f80516020620008fd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f80516020620008fd83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b608051610479620004845f395f601001526104795ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610081575f357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007957610077610085565b565b610077610095565b6100775b6100776100906100c3565b6100fa565b5f806100a43660048184610313565b8101906100b1919061034e565b915091506100bf8282610118565b5050565b5f6100f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e808015610114573d5ff35b3d5ffd5b61012182610172565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561016a5761016582826101fa565b505050565b6100bf61026c565b806001600160a01b03163b5f036101ac57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516102169190610417565b5f60405180830381855af49150503d805f811461024e576040519150601f19603f3d011682016040523d82523d5f602084013e610253565b606091505b509150915061026385838361028b565b95945050505050565b34156100775760405163b398979f60e01b815260040160405180910390fd5b6060826102a05761029b826102ea565b6102e3565b81511580156102b757506001600160a01b0384163b155b156102e057604051639996b31560e01b81526001600160a01b03851660048201526024016101a3565b50805b9392505050565b8051156102fa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8085851115610321575f80fd5b8386111561032d575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561035f575f80fd5b82356001600160a01b0381168114610375575f80fd5b9150602083013567ffffffffffffffff80821115610391575f80fd5b818501915085601f8301126103a4575f80fd5b8135818111156103b6576103b661033a565b604051601f8201601f19908116603f011681019083821181831017156103de576103de61033a565b816040528281528860208487010111156103f6575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610436576020818601810151858301520161041c565b505f92019182525091905056fea264697066735822122021e23b4641727aa4aa8fd2d3ef7960a43cab420d4c8632503bedc3eb2d30690764736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220e44c31f40e8863e278ad7aad94a497e0764f056da13a4ee3106a7db2c90d2b4064736f6c63430008140033", + "bytecode": "0x60e060405234801562000010575f80fd5b5060405162005fb638038062005fb6833981016040819052620000339162000136565b6001600160a01b0380841660805282811660c052811660a052620000566200005f565b50505062000187565b5f54610100900460ff1615620000cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156200011c575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000133575f80fd5b50565b5f805f6060848603121562000149575f80fd5b835162000156816200011e565b602085015190935062000169816200011e565b60408501519092506200017c816200011e565b809150509250925092565b60805160a05160c051615dcc620001ea5f395f8181610ac0015281816122b00152613bf201525f818161087b01528181612e8b0152613ef601525f8181610a1a015281816112fa015281816114be015281816120250152613deb0152615dcc5ff3fe608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000aba578063f34eb8eb1462000ae2578063f4e926751462000af9578063f9c4c2ae1462000b0a575f80fd5b8063dbc169761462000a7e578063dde0ff771462000a88578063e0bfd3d21462000aa3575f80fd5b8063d02103ca11620000eb578063d02103ca1462000a14578063d5073f6f1462000a3c578063d547741f1462000a53578063d939b3151462000a6a575f80fd5b8063c1acbc3414620009ba578063c4c928c214620009d5578063ceee281d14620009ec575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d99146200086b578063a3c573eb1462000875578063afd23cbe14620008b6578063b99d0ad714620008e0575f80fd5b80639c9f3dfe1462000835578063a066215c146200084c578063a217fddf1462000863575f80fd5b806391d1485411620001bb57806391d1485414620007d957806399f5634e14620008145780639a908e73146200081e575f80fd5b8063841b24d7146200079057806387c20c0114620007ab5780638bd4f07114620007c2575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000714578063727885e9146200072b5780637975fcfe14620007425780637fb6e76a1462000768575f80fd5b806355a71ee0146200061957806360469169146200065c57806365c0504d1462000666575f80fd5b806336568abe116200029757806336568abe14620005e2578063394218e914620005f9578063477fa2701462000610575f80fd5b80632528016914620005035780632f2ff15d14620005b757806330c27dde14620005ce575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae14620004875780631816b7e514620004ae5780632072f6c514620004c5578063248a9ca314620004cf575f80fd5b80631489ed10146200044b57806315064c9614620004625780631608859c1462000470575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040257806311f6b287146200041d57806312b86e191462000434575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003da575b5f80fd5b620003a7620003a13660046200490d565b62000c20565b005b608454620003bd906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b620003f1620003eb366004620049f6565b620011ed565b6040519015158152602001620003d1565b608554620003bd90600160401b90046001600160401b031681565b620003bd6200042e36600462004a2c565b62001216565b620003a76200044536600462004a5a565b62001235565b620003a76200045c36600462004aec565b620013f9565b606f54620003f19060ff1681565b620003a762000481366004620049f6565b620015a3565b607e54620004989063ffffffff1681565b60405163ffffffff9091168152602001620003d1565b620003a7620004bf36600462004b71565b6200164d565b620003a76200170a565b620004f4620004e036600462004b9b565b5f9081526034602052604090206001015490565b604051908152602001620003d1565b6200058362000514366004620049f6565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003d1565b620003a7620005c836600462004bb3565b620017e6565b608754620003bd906001600160401b031681565b620003a7620005f336600462004bb3565b6200180e565b620003a76200060a36600462004be4565b62001848565b608654620004f4565b620004f46200062a366004620049f6565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b620004f46200190d565b620006ca6200067736600462004a2c565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003d1565b620003a76200072536600462004a2c565b62001924565b620003a76200073c36600462004ca4565b62001a1e565b620007596200075336600462004d6a565b62001e7b565b604051620003d1919062004e1d565b620004986200077936600462004be4565b60836020525f908152604090205463ffffffff1681565b608454620003bd90600160c01b90046001600160401b031681565b620003a7620007bc36600462004aec565b62001ead565b620003a7620007d336600462004a5a565b620021d8565b620003f1620007ea36600462004bb3565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620004f46200228f565b620003bd6200082f36600462004e31565b62002370565b620003a76200084636600462004be4565b6200253c565b620003a76200085d36600462004be4565b620025f3565b620004f45f81565b620004f4620026a9565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001620003d1565b608554620008cc90600160801b900461ffff1681565b60405161ffff9091168152602001620003d1565b62000975620008f1366004620049f6565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d191905f6080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003bd90600160801b90046001600160401b031681565b620003a7620009e636600462004e5c565b62002a71565b62000498620009fd36600462004eed565b60826020525f908152604090205463ffffffff1681565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000a4d36600462004b9b565b62002d6d565b620003a762000a6436600462004bb3565b62002e09565b608554620003bd906001600160401b031681565b620003a762002e31565b608454620003bd90600160401b90046001600160401b031681565b620003a762000ab436600462004f1c565b62002efd565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000af336600462004f94565b62002fd1565b608054620004989063ffffffff1681565b62000ba062000b1b36600462004a2c565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d1565b5f54600290610100900460ff1615801562000c4157505f5460ff8083169116105b62000cb95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d4c620031c5565b62000d787f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003231565b62000d845f8862003231565b62000db07fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003231565b62000ddc7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003231565b62000e087f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003231565b62000e347fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003231565b62000e607fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003231565b62000e8c7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003231565b62000eb87fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003231565b62000f047f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200323d565b62000f307f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003231565b62000f5c7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003231565b62000fa87f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200323d565b62000fd47f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003231565b620010007f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003231565b6073546074546001600160401b03600160401b909204821691168082146200103b57604051632e4cc54360e11b815260040160405180910390fd5b5f62001060888888885f60745f9054906101000a90046001600160401b031662003287565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a1667ffffffffffffffff198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a5946200116694938316936b01000000000000000000000090049092169160769160779190600401620050cd565b5f604051808303815f87803b1580156200117e575f80fd5b505af115801562001191573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249893506020019150620011d89050565b60405180910390a15050505050505050505050565b63ffffffff82165f9081526081602052604081206200120d9083620034a8565b90505b92915050565b63ffffffff81165f9081526081602052604081206200121090620034ec565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001261816200355b565b63ffffffff89165f90815260816020526040902062001287818a8a8a8a8a8a8a62003567565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012f8576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001331620026a9565b6040518263ffffffff1660e01b81526004016200135091815260200190565b5f604051808303815f87803b15801562001368575f80fd5b505af11580156200137b573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001425816200355b565b63ffffffff89165f9081526081602052604090206200144b818a8a8a8a8a8a8a620038f5565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b90041615620014bc576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014f5620026a9565b6040518263ffffffff1660e01b81526004016200151491815260200190565b5f604051808303815f87803b1580156200152c575f80fd5b505af11580156200153f573d5f803e3d5ffd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200163c57606f5460ff16156200161257604051630bc011ff60e21b815260040160405180910390fd5b6200161e8183620034a8565b6200163c57604051630674f25160e11b815260040160405180910390fd5b62001648818362003d08565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001679816200355b565b6103e88261ffff1610806200169357506103ff8261ffff16115b15620016b257604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff16620017da57608454600160801b90046001600160401b031615806200178b57506084544290620017809062093a8090600160801b90046001600160401b031662005135565b6001600160401b0316115b80620017bb57506087544290620017b09062093a80906001600160401b031662005135565b6001600160401b0316115b15620017da5760405163692baaad60e11b815260040160405180910390fd5b620017e462003ef4565b565b5f8281526034602052604090206001015462001802816200355b565b62001648838362003f6e565b6001600160a01b03811633146200183857604051630b4ad1cd60e31b815260040160405180910390fd5b62001844828262003ff2565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001874816200355b565b606f5460ff16620018b6576084546001600160401b03600160c01b909104811690831610620018b65760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001620016fe565b5f60865460646200191f91906200515f565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001950816200355b565b63ffffffff821615806200196f5750607e5463ffffffff908116908316115b156200198e57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff1615159003620019d457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001a4a816200355b565b63ffffffff8816158062001a695750607e5463ffffffff908116908916115b1562001a8857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001ace57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001b0b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001b259063ffffffff1662005179565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001b7290620048d3565b62001b80939291906200519e565b604051809103905ff08015801562001b9a573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001dfe949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001e3e908d908d9088908e908e908e90600401620051d4565b5f604051808303815f87803b15801562001e56575f80fd5b505af115801562001e69573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001ea290878787878762004074565b979650505050505050565b606f5460ff161562001ed257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001f2092600160c01b90048116911662005135565b6001600160401b0316111562001f4957604051638a0704d360e01b815260040160405180910390fd5b6103e862001f58888862005236565b6001600160401b0316111562001f8157604051635acfba9d60e11b815260040160405180910390fd5b62001f938189898989898989620038f5565b62001f9f8187620041cb565b6085546001600160401b03165f03620020b05760068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562002023576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d6200205c620026a9565b6040518263ffffffff1660e01b81526004016200207b91815260200190565b5f604051808303815f87803b15801562002093575f80fd5b505af1158015620020a6573d5f803e3d5ffd5b5050505062002179565b620020bb81620043c2565b600681018054600160801b90046001600160401b0316906010620020df8362005259565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620021fd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002223818989898989898962003567565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200228462003ef4565b505050505050505050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015620022f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231c919062005277565b6084549091505f9062002342906001600160401b03600160401b82048116911662005236565b6001600160401b03169050805f036200235d575f9250505090565b620023698183620052a3565b9250505090565b606f545f9060ff16156200239757604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023ce576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023f857604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242a9084906001600160401b031662005135565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200245f878362005135565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024ee83620043c2565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002568816200355b565b606f5460ff16620025a3576085546001600160401b0390811690831610620025a35760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001620016fe565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200261f816200355b565b62015180826001600160401b031611156200264d57604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001620016fe565b6080545f9063ffffffff16808203620026c357505f919050565b5f816001600160401b03811115620026df57620026df62004c00565b60405190808252806020026020018201604052801562002709578160200160208202803683370190505b5090505f5b82811015620027795760815f62002727836001620052b9565b63ffffffff1663ffffffff1681526020019081526020015f2060050154828281518110620027595762002759620052cf565b6020908102919091010152806200277081620052e3565b9150506200270e565b505f60205b83600114620029d1575f62002795600286620052fe565b620027a2600287620052a3565b620027ae9190620052b9565b90505f816001600160401b03811115620027cc57620027cc62004c00565b604051908082528060200260200182016040528015620027f6578160200160208202803683370190505b5090505f5b828110156200297d576200281160018462005314565b811480156200282c575062002828600288620052fe565b6001145b15620028b45785620028408260026200515f565b81518110620028535762002853620052cf565b60200260200101518560405160200162002877929190918252602082015260400190565b60405160208183030381529060405280519060200120828281518110620028a257620028a2620052cf565b60200260200101818152505062002968565b85620028c28260026200515f565b81518110620028d557620028d5620052cf565b602002602001015186826002620028ed91906200515f565b620028fa906001620052b9565b815181106200290d576200290d620052cf565b602002602001015160405160200162002930929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200295b576200295b620052cf565b6020026020010181815250505b806200297481620052e3565b915050620027fb565b508094508195508384604051602001620029a1929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620029c6906200532a565b93505050506200277e565b5f835f81518110620029e757620029e7620052cf565b602002602001015190505f5b8281101562002a6757604080516020810184905290810185905260600160408051601f1981840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002a5e90620052e3565b915050620029f3565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002a9d816200355b565b63ffffffff8416158062002abc5750607e5463ffffffff908116908516115b1562002adb57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002b1b576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b6957604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002baf57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002bed57604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b199091161790555f62002c928462001216565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002ce89216908b908b9060040162005342565b5f604051808303815f87803b15801562002d00575f80fd5b505af115801562002d13573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002d99816200355b565b683635c9adc5dea0000082118062002db45750633b9aca0082105b1562002dd357604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016fe565b5f8281526034602052604090206001015462002e25816200355b565b62001648838362003ff2565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002e5d816200355b565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002ed9575f80fd5b505af115801562002eec573d5f803e3d5ffd5b5050505062002efa6200448b565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002f29816200355b565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002f66576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002fa357604051630d409b9360e41b815260040160405180910390fd5b5f62002fb488888888875f62003287565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002ffd816200355b565b607e80545f91908290620030179063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620031b39695949392919062005380565b60405180910390a25050505050505050565b5f54610100900460ff16620017e45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000cb0565b62001844828262003f6e565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620032a29063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620034959594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034da92918116911662005135565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200353e575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002efa8133620044e3565b60078801545f906001600160401b0390811690871610156200359c5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200363c5760068901546001600160401b03600160801b90910481169089161115620035e65760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200363557604051632bd2e3e760e01b815260040160405180910390fd5b50620036b0565b506001600160401b0385165f9081526002890160205260409020548062003676576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620036b057604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036e95750876001600160401b0316876001600160401b031611155b806200370d575060068901546001600160401b03600160c01b909104811690881611155b156200372c5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b900481169086161462003772576040516332a2a77f60e01b815260040160405180910390fd5b5f620037838a888888868962004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037b99190620053d7565b602060405180830381855afa158015620037d5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190620037fa919062005277565b620038069190620052fe565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200384a91889190600401620053f4565b602060405180830381865afa15801562003866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200388c919062005430565b620038aa576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038e85760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f80620039028a620034ec565b60078b01549091506001600160401b039081169089161015620039385760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039da5760068a01546001600160401b03600160801b9091048116908a161115620039825760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620039d357604051632bd2e3e760e01b815260040160405180910390fd5b5062003a49565b6001600160401b0388165f90815260028b01602052604090205491508162003a15576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b0316111562003a4957604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b03161162003a7c5760405163b9b18f5760e01b815260040160405180910390fd5b5f62003a8d8b8a8a8a878b62004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ac39190620053d7565b602060405180830381855afa15801562003adf573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003b04919062005277565b62003b109190620052fe565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003b5491899190600401620053f4565b602060405180830381865afa15801562003b70573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003b96919062005430565b62003bb4576040516309bde33960e01b815260040160405180910390fd5b5f62003bc1848b62005236565b905062003c1a87826001600160401b031662003bdc6200228f565b62003be891906200515f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919062004526565b80608460088282829054906101000a90046001600160401b031662003c40919062005135565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003ce2575f80fd5b505af115801562003cf5573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003d47575060068201546001600160401b03600160801b9091048116908216115b1562003d665760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f8181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003e22620026a9565b6040518263ffffffff1660e01b815260040162003e4191815260200190565b5f604051808303815f87803b15801562003e59575f80fd5b505af115801562003e6c573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003f4d575f80fd5b505af115801562003f60573d5f803e3d5ffd5b50505050620017e46200458f565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff1662001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff161562001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f8181526003890160205260408082205493881682529020546060929115801590620040a9575081155b15620040c85760405163340c614f60e11b815260040160405180910390fd5b80620040e7576040516366385b5160e01b815260040160405180910390fd5b620040f284620045eb565b62004110576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f620041d783620034ec565b9050815f80620041e8848462005236565b6085546001600160401b0391821692505f916200420e91600160401b9004164262005314565b90505b846001600160401b0316846001600160401b03161462004297576001600160401b038085165f9081526003890160205260409020600181015490911682101562004272576001810154600160401b90046001600160401b0316945062004290565b6200427e868662005236565b6001600160401b031693505062004297565b5062004211565b5f620042a4848462005314565b9050838110156200430257808403600c8111620042c25780620042c5565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620042f757620042f76200528f565b046086555062004379565b838103600c811162004315578062004318565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a764000002816200435157620043516200528f565b04905080608654670de0b6b3a764000002816200437257620043726200528f565b0460865550505b683635c9adc5dea000006086541115620043a057683635c9adc5dea00000608655620043b8565b633b9aca006086541015620043b857633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002efa5760068101545f906200440c90600160c01b90046001600160401b0316600162005135565b90506200441a8282620034a8565b15620018445760068201545f9060029062004447908490600160801b90046001600160401b031662005236565b62004453919062005451565b6200445f908362005135565b90506200446d8382620034a8565b156200447f5762001648838262003d08565b62001648838362003d08565b606f5460ff16620044af57604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff166200184457604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620016489084906200466f565b606f5460ff1615620045b457604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b03831610801562004621575067ffffffff00000001604083901c6001600160401b0316105b801562004642575067ffffffff00000001608083901c6001600160401b0316105b80156200465a575067ffffffff0000000160c083901c105b156200466857506001919050565b505f919050565b5f620046c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620047479092919063ffffffff16565b805190915015620016485780806020019051810190620046e6919062005430565b620016485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000cb0565b60606200475784845f856200475f565b949350505050565b606082471015620047c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000cb0565b5f80866001600160a01b03168587604051620047df9190620053d7565b5f6040518083038185875af1925050503d805f81146200481b576040519150601f19603f3d011682016040523d82523d5f602084013e62004820565b606091505b509150915062001ea28783838760608315620048a05782515f0362004898576001600160a01b0385163b620048985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000cb0565b508162004757565b620047578383815115620048b75781518083602001fd5b8060405162461bcd60e51b815260040162000cb0919062004e1d565b61091d806200547a83390190565b6001600160a01b038116811462002efa575f80fd5b80356001600160401b038116811462003556575f80fd5b5f805f805f805f805f806101408b8d03121562004928575f80fd5b8a356200493581620048e1565b99506200494560208c01620048f6565b98506200495560408c01620048f6565b975060608b01356200496781620048e1565b965060808b01356200497981620048e1565b955060a08b01356200498b81620048e1565b945060c08b01356200499d81620048e1565b935060e08b0135620049af81620048e1565b9250620049c06101008c01620048f6565b9150620049d16101208c01620048f6565b90509295989b9194979a5092959850565b803563ffffffff8116811462003556575f80fd5b5f806040838503121562004a08575f80fd5b62004a1383620049e2565b915062004a2360208401620048f6565b90509250929050565b5f6020828403121562004a3d575f80fd5b6200120d82620049e2565b80610300810183101562001210575f80fd5b5f805f805f805f806103e0898b03121562004a73575f80fd5b62004a7e89620049e2565b975062004a8e60208a01620048f6565b965062004a9e60408a01620048f6565b955062004aae60608a01620048f6565b945062004abe60808a01620048f6565b935060a0890135925060c0890135915062004add8a60e08b0162004a48565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004b05575f80fd5b62004b1089620049e2565b975062004b2060208a01620048f6565b965062004b3060408a01620048f6565b955062004b4060608a01620048f6565b94506080890135935060a0890135925060c089013562004b6081620048e1565b915062004add8a60e08b0162004a48565b5f6020828403121562004b82575f80fd5b813561ffff8116811462004b94575f80fd5b9392505050565b5f6020828403121562004bac575f80fd5b5035919050565b5f806040838503121562004bc5575f80fd5b82359150602083013562004bd981620048e1565b809150509250929050565b5f6020828403121562004bf5575f80fd5b6200120d82620048f6565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262004c24575f80fd5b81356001600160401b038082111562004c415762004c4162004c00565b604051601f8301601f19908116603f0116810190828211818310171562004c6c5762004c6c62004c00565b8160405283815286602085880101111562004c85575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562004cbb575f80fd5b62004cc688620049e2565b965062004cd660208901620048f6565b9550604088013562004ce881620048e1565b9450606088013562004cfa81620048e1565b9350608088013562004d0c81620048e1565b925060a08801356001600160401b038082111562004d28575f80fd5b62004d368b838c0162004c14565b935060c08a013591508082111562004d4c575f80fd5b5062004d5b8a828b0162004c14565b91505092959891949750929550565b5f805f805f8060c0878903121562004d80575f80fd5b62004d8b87620049e2565b955062004d9b60208801620048f6565b945062004dab60408801620048f6565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004de857818101518382015260200162004dce565b50505f910152565b5f815180845262004e0981602086016020860162004dcc565b601f01601f19169290920160200192915050565b602081525f6200120d602083018462004df0565b5f806040838503121562004e43575f80fd5b62004e4e83620048f6565b946020939093013593505050565b5f805f806060858703121562004e70575f80fd5b843562004e7d81620048e1565b935062004e8d60208601620049e2565b925060408501356001600160401b038082111562004ea9575f80fd5b818701915087601f83011262004ebd575f80fd5b81358181111562004ecc575f80fd5b88602082850101111562004ede575f80fd5b95989497505060200194505050565b5f6020828403121562004efe575f80fd5b813562004b9481620048e1565b803560ff8116811462003556575f80fd5b5f805f805f8060c0878903121562004f32575f80fd5b863562004f3f81620048e1565b9550602087013562004f5181620048e1565b945062004f6160408801620048f6565b935062004f7160608801620048f6565b92506080870135915062004f8860a0880162004f0b565b90509295509295509295565b5f805f805f8060c0878903121562004faa575f80fd5b863562004fb781620048e1565b9550602087013562004fc981620048e1565b945062004fd960408801620048f6565b935062004fe96060880162004f0b565b92506080870135915060a08701356001600160401b038111156200500b575f80fd5b6200501989828a0162004c14565b9150509295509295509295565b80545f90600181811c90808316806200504057607f831692505b602080841082036200506057634e487b7160e01b5f52602260045260245ffd5b838852602088018280156200507e57600181146200509557620050c0565b60ff198716825285151560051b82019750620050c0565b5f898152602090205f5b87811015620050ba578154848201529086019084016200509f565b83019850505b5050505050505092915050565b5f6001600160a01b03808816835280871660208401525060a06040830152620050fa60a083018662005026565b82810360608401526200510e818662005026565b9150508260808301529695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111562005158576200515862005121565b5092915050565b808202811582820484141762001210576200121062005121565b5f63ffffffff80831681810362005194576200519462005121565b6001019392505050565b5f6001600160a01b03808616835280851660208401525060606040830152620051cb606083018462004df0565b95945050505050565b5f6001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200521560c083018562004df0565b82810360a084015262005229818562004df0565b9998505050505050505050565b6001600160401b0382811682821603908082111562005158576200515862005121565b5f6001600160401b0380831681810362005194576200519462005121565b5f6020828403121562005288575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82620052b457620052b46200528f565b500490565b8082018082111562001210576200121062005121565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620052f757620052f762005121565b5060010190565b5f826200530f576200530f6200528f565b500690565b8181038181111562001210576200121062005121565b5f816200533b576200533b62005121565b505f190190565b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f6001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a0830152620053cb60c083018462004df0565b98975050505050505050565b5f8251620053ea81846020870162004dcc565b9190910192915050565b6103208101610300808584378201835f5b60018110156200542657815183526020928301929091019060010162005405565b5050509392505050565b5f6020828403121562005441575f80fd5b8151801515811462004b94575f80fd5b5f6001600160401b03808416806200546d576200546d6200528f565b9216919091049291505056fe60a06040526040516200091d3803806200091d833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f80516020620008fd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f80516020620008fd83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b608051610479620004845f395f601001526104795ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610081575f357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007957610077610085565b565b610077610095565b6100775b6100776100906100c3565b6100fa565b5f806100a43660048184610313565b8101906100b1919061034e565b915091506100bf8282610118565b5050565b5f6100f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e808015610114573d5ff35b3d5ffd5b61012182610172565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561016a5761016582826101fa565b505050565b6100bf61026c565b806001600160a01b03163b5f036101ac57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516102169190610417565b5f60405180830381855af49150503d805f811461024e576040519150601f19603f3d011682016040523d82523d5f602084013e610253565b606091505b509150915061026385838361028b565b95945050505050565b34156100775760405163b398979f60e01b815260040160405180910390fd5b6060826102a05761029b826102ea565b6102e3565b81511580156102b757506001600160a01b0384163b155b156102e057604051639996b31560e01b81526001600160a01b03851660048201526024016101a3565b50805b9392505050565b8051156102fa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8085851115610321575f80fd5b8386111561032d575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561035f575f80fd5b82356001600160a01b0381168114610375575f80fd5b9150602083013567ffffffffffffffff80821115610391575f80fd5b818501915085601f8301126103a4575f80fd5b8135818111156103b6576103b661033a565b604051601f8201601f19908116603f011681019083821181831017156103de576103de61033a565b816040528281528860208487010111156103f6575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610436576020818601810151858301520161041c565b505f92019182525091905056fea264697066735822122021e23b4641727aa4aa8fd2d3ef7960a43cab420d4c8632503bedc3eb2d30690764736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212202ebb683450d7b4e6eb4bdbede3ecde1b348bfc9d8d354de2b24c7938858af51364736f6c63430008140033", + "deployedBytecode": "0x608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000aba578063f34eb8eb1462000ae2578063f4e926751462000af9578063f9c4c2ae1462000b0a575f80fd5b8063dbc169761462000a7e578063dde0ff771462000a88578063e0bfd3d21462000aa3575f80fd5b8063d02103ca11620000eb578063d02103ca1462000a14578063d5073f6f1462000a3c578063d547741f1462000a53578063d939b3151462000a6a575f80fd5b8063c1acbc3414620009ba578063c4c928c214620009d5578063ceee281d14620009ec575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d99146200086b578063a3c573eb1462000875578063afd23cbe14620008b6578063b99d0ad714620008e0575f80fd5b80639c9f3dfe1462000835578063a066215c146200084c578063a217fddf1462000863575f80fd5b806391d1485411620001bb57806391d1485414620007d957806399f5634e14620008145780639a908e73146200081e575f80fd5b8063841b24d7146200079057806387c20c0114620007ab5780638bd4f07114620007c2575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000714578063727885e9146200072b5780637975fcfe14620007425780637fb6e76a1462000768575f80fd5b806355a71ee0146200061957806360469169146200065c57806365c0504d1462000666575f80fd5b806336568abe116200029757806336568abe14620005e2578063394218e914620005f9578063477fa2701462000610575f80fd5b80632528016914620005035780632f2ff15d14620005b757806330c27dde14620005ce575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae14620004875780631816b7e514620004ae5780632072f6c514620004c5578063248a9ca314620004cf575f80fd5b80631489ed10146200044b57806315064c9614620004625780631608859c1462000470575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040257806311f6b287146200041d57806312b86e191462000434575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003da575b5f80fd5b620003a7620003a13660046200490d565b62000c20565b005b608454620003bd906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b620003f1620003eb366004620049f6565b620011ed565b6040519015158152602001620003d1565b608554620003bd90600160401b90046001600160401b031681565b620003bd6200042e36600462004a2c565b62001216565b620003a76200044536600462004a5a565b62001235565b620003a76200045c36600462004aec565b620013f9565b606f54620003f19060ff1681565b620003a762000481366004620049f6565b620015a3565b607e54620004989063ffffffff1681565b60405163ffffffff9091168152602001620003d1565b620003a7620004bf36600462004b71565b6200164d565b620003a76200170a565b620004f4620004e036600462004b9b565b5f9081526034602052604090206001015490565b604051908152602001620003d1565b6200058362000514366004620049f6565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003d1565b620003a7620005c836600462004bb3565b620017e6565b608754620003bd906001600160401b031681565b620003a7620005f336600462004bb3565b6200180e565b620003a76200060a36600462004be4565b62001848565b608654620004f4565b620004f46200062a366004620049f6565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b620004f46200190d565b620006ca6200067736600462004a2c565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003d1565b620003a76200072536600462004a2c565b62001924565b620003a76200073c36600462004ca4565b62001a1e565b620007596200075336600462004d6a565b62001e7b565b604051620003d1919062004e1d565b620004986200077936600462004be4565b60836020525f908152604090205463ffffffff1681565b608454620003bd90600160c01b90046001600160401b031681565b620003a7620007bc36600462004aec565b62001ead565b620003a7620007d336600462004a5a565b620021d8565b620003f1620007ea36600462004bb3565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620004f46200228f565b620003bd6200082f36600462004e31565b62002370565b620003a76200084636600462004be4565b6200253c565b620003a76200085d36600462004be4565b620025f3565b620004f45f81565b620004f4620026a9565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001620003d1565b608554620008cc90600160801b900461ffff1681565b60405161ffff9091168152602001620003d1565b62000975620008f1366004620049f6565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d191905f6080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003bd90600160801b90046001600160401b031681565b620003a7620009e636600462004e5c565b62002a71565b62000498620009fd36600462004eed565b60826020525f908152604090205463ffffffff1681565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000a4d36600462004b9b565b62002d6d565b620003a762000a6436600462004bb3565b62002e09565b608554620003bd906001600160401b031681565b620003a762002e31565b608454620003bd90600160401b90046001600160401b031681565b620003a762000ab436600462004f1c565b62002efd565b6200089d7f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000af336600462004f94565b62002fd1565b608054620004989063ffffffff1681565b62000ba062000b1b36600462004a2c565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d1565b5f54600290610100900460ff1615801562000c4157505f5460ff8083169116105b62000cb95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d4c620031c5565b62000d787f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003231565b62000d845f8862003231565b62000db07fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003231565b62000ddc7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003231565b62000e087f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003231565b62000e347fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003231565b62000e607fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003231565b62000e8c7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003231565b62000eb87fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003231565b62000f047f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200323d565b62000f307f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003231565b62000f5c7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003231565b62000fa87f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200323d565b62000fd47f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003231565b620010007f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003231565b6073546074546001600160401b03600160401b909204821691168082146200103b57604051632e4cc54360e11b815260040160405180910390fd5b5f62001060888888885f60745f9054906101000a90046001600160401b031662003287565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a1667ffffffffffffffff198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a5946200116694938316936b01000000000000000000000090049092169160769160779190600401620050cd565b5f604051808303815f87803b1580156200117e575f80fd5b505af115801562001191573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249893506020019150620011d89050565b60405180910390a15050505050505050505050565b63ffffffff82165f9081526081602052604081206200120d9083620034a8565b90505b92915050565b63ffffffff81165f9081526081602052604081206200121090620034ec565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001261816200355b565b63ffffffff89165f90815260816020526040902062001287818a8a8a8a8a8a8a62003567565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012f8576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001331620026a9565b6040518263ffffffff1660e01b81526004016200135091815260200190565b5f604051808303815f87803b15801562001368575f80fd5b505af11580156200137b573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd462001425816200355b565b63ffffffff89165f9081526081602052604090206200144b818a8a8a8a8a8a8a620038f5565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b90041615620014bc576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014f5620026a9565b6040518263ffffffff1660e01b81526004016200151491815260200190565b5f604051808303815f87803b1580156200152c575f80fd5b505af11580156200153f573d5f803e3d5ffd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200163c57606f5460ff16156200161257604051630bc011ff60e21b815260040160405180910390fd5b6200161e8183620034a8565b6200163c57604051630674f25160e11b815260040160405180910390fd5b62001648818362003d08565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001679816200355b565b6103e88261ffff1610806200169357506103ff8261ffff16115b15620016b257604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff16620017da57608454600160801b90046001600160401b031615806200178b57506084544290620017809062093a8090600160801b90046001600160401b031662005135565b6001600160401b0316115b80620017bb57506087544290620017b09062093a80906001600160401b031662005135565b6001600160401b0316115b15620017da5760405163692baaad60e11b815260040160405180910390fd5b620017e462003ef4565b565b5f8281526034602052604090206001015462001802816200355b565b62001648838362003f6e565b6001600160a01b03811633146200183857604051630b4ad1cd60e31b815260040160405180910390fd5b62001844828262003ff2565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001874816200355b565b606f5460ff16620018b6576084546001600160401b03600160c01b909104811690831610620018b65760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001620016fe565b5f60865460646200191f91906200515f565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001950816200355b565b63ffffffff821615806200196f5750607e5463ffffffff908116908316115b156200198e57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff1615159003620019d457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001a4a816200355b565b63ffffffff8816158062001a695750607e5463ffffffff908116908916115b1562001a8857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001ace57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001b0b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001b259063ffffffff1662005179565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001b7290620048d3565b62001b80939291906200519e565b604051809103905ff08015801562001b9a573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001dfe949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001e3e908d908d9088908e908e908e90600401620051d4565b5f604051808303815f87803b15801562001e56575f80fd5b505af115801562001e69573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001ea290878787878762004074565b979650505050505050565b606f5460ff161562001ed257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001f2092600160c01b90048116911662005135565b6001600160401b0316111562001f4957604051638a0704d360e01b815260040160405180910390fd5b6103e862001f58888862005236565b6001600160401b0316111562001f8157604051635acfba9d60e11b815260040160405180910390fd5b62001f938189898989898989620038f5565b62001f9f8187620041cb565b6085546001600160401b03165f03620020b05760068101805467ffffffffffffffff60401b1916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562002023576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d6200205c620026a9565b6040518263ffffffff1660e01b81526004016200207b91815260200190565b5f604051808303815f87803b15801562002093575f80fd5b505af1158015620020a6573d5f803e3d5ffd5b5050505062002179565b620020bb81620043c2565b600681018054600160801b90046001600160401b0316906010620020df8362005259565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620021fd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002223818989898989898962003567565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200228462003ef4565b505050505050505050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015620022f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231c919062005277565b6084549091505f9062002342906001600160401b03600160401b82048116911662005236565b6001600160401b03169050805f036200235d575f9250505090565b620023698183620052a3565b9250505090565b606f545f9060ff16156200239757604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023ce576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023f857604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242a9084906001600160401b031662005135565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200245f878362005135565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024ee83620043c2565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002568816200355b565b606f5460ff16620025a3576085546001600160401b0390811690831610620025a35760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001620016fe565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200261f816200355b565b62015180826001600160401b031611156200264d57604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001620016fe565b6080545f9063ffffffff16808203620026c357505f919050565b5f816001600160401b03811115620026df57620026df62004c00565b60405190808252806020026020018201604052801562002709578160200160208202803683370190505b5090505f5b82811015620027795760815f62002727836001620052b9565b63ffffffff1663ffffffff1681526020019081526020015f2060050154828281518110620027595762002759620052cf565b6020908102919091010152806200277081620052e3565b9150506200270e565b505f60205b83600114620029d1575f62002795600286620052fe565b620027a2600287620052a3565b620027ae9190620052b9565b90505f816001600160401b03811115620027cc57620027cc62004c00565b604051908082528060200260200182016040528015620027f6578160200160208202803683370190505b5090505f5b828110156200297d576200281160018462005314565b811480156200282c575062002828600288620052fe565b6001145b15620028b45785620028408260026200515f565b81518110620028535762002853620052cf565b60200260200101518560405160200162002877929190918252602082015260400190565b60405160208183030381529060405280519060200120828281518110620028a257620028a2620052cf565b60200260200101818152505062002968565b85620028c28260026200515f565b81518110620028d557620028d5620052cf565b602002602001015186826002620028ed91906200515f565b620028fa906001620052b9565b815181106200290d576200290d620052cf565b602002602001015160405160200162002930929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200295b576200295b620052cf565b6020026020010181815250505b806200297481620052e3565b915050620027fb565b508094508195508384604051602001620029a1929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620029c6906200532a565b93505050506200277e565b5f835f81518110620029e757620029e7620052cf565b602002602001015190505f5b8281101562002a6757604080516020810184905290810185905260600160408051601f1981840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002a5e90620052e3565b915050620029f3565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002a9d816200355b565b63ffffffff8416158062002abc5750607e5463ffffffff908116908516115b1562002adb57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002b1b576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b6957604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002baf57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002bed57604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b199091161790555f62002c928462001216565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002ce89216908b908b9060040162005342565b5f604051808303815f87803b15801562002d00575f80fd5b505af115801562002d13573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002d99816200355b565b683635c9adc5dea0000082118062002db45750633b9aca0082105b1562002dd357604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016fe565b5f8281526034602052604090206001015462002e25816200355b565b62001648838362003ff2565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002e5d816200355b565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002ed9575f80fd5b505af115801562002eec573d5f803e3d5ffd5b5050505062002efa6200448b565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002f29816200355b565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002f66576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002fa357604051630d409b9360e41b815260040160405180910390fd5b5f62002fb488888888875f62003287565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002ffd816200355b565b607e80545f91908290620030179063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620031b39695949392919062005380565b60405180910390a25050505050505050565b5f54610100900460ff16620017e45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000cb0565b62001844828262003f6e565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620032a29063ffffffff1662005179565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620034959594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034da92918116911662005135565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200353e575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002efa8133620044e3565b60078801545f906001600160401b0390811690871610156200359c5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200363c5760068901546001600160401b03600160801b90910481169089161115620035e65760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200363557604051632bd2e3e760e01b815260040160405180910390fd5b50620036b0565b506001600160401b0385165f9081526002890160205260409020548062003676576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620036b057604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036e95750876001600160401b0316876001600160401b031611155b806200370d575060068901546001600160401b03600160c01b909104811690881611155b156200372c5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b900481169086161462003772576040516332a2a77f60e01b815260040160405180910390fd5b5f620037838a888888868962004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037b99190620053d7565b602060405180830381855afa158015620037d5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190620037fa919062005277565b620038069190620052fe565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200384a91889190600401620053f4565b602060405180830381865afa15801562003866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200388c919062005430565b620038aa576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038e85760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f80620039028a620034ec565b60078b01549091506001600160401b039081169089161015620039385760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039da5760068a01546001600160401b03600160801b9091048116908a161115620039825760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620039d357604051632bd2e3e760e01b815260040160405180910390fd5b5062003a49565b6001600160401b0388165f90815260028b01602052604090205491508162003a15576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b0316111562003a4957604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b03161162003a7c5760405163b9b18f5760e01b815260040160405180910390fd5b5f62003a8d8b8a8a8a878b62004074565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ac39190620053d7565b602060405180830381855afa15801562003adf573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003b04919062005277565b62003b109190620052fe565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003b5491899190600401620053f4565b602060405180830381865afa15801562003b70573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003b96919062005430565b62003bb4576040516309bde33960e01b815260040160405180910390fd5b5f62003bc1848b62005236565b905062003c1a87826001600160401b031662003bdc6200228f565b62003be891906200515f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919062004526565b80608460088282829054906101000a90046001600160401b031662003c40919062005135565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003ce2575f80fd5b505af115801562003cf5573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003d47575060068201546001600160401b03600160801b9091048116908216115b1562003d665760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f8181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003e22620026a9565b6040518263ffffffff1660e01b815260040162003e4191815260200190565b5f604051808303815f87803b15801562003e59575f80fd5b505af115801562003e6c573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003f4d575f80fd5b505af115801562003f60573d5f803e3d5ffd5b50505050620017e46200458f565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff1662001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff161562001844575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f8181526003890160205260408082205493881682529020546060929115801590620040a9575081155b15620040c85760405163340c614f60e11b815260040160405180910390fd5b80620040e7576040516366385b5160e01b815260040160405180910390fd5b620040f284620045eb565b62004110576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f620041d783620034ec565b9050815f80620041e8848462005236565b6085546001600160401b0391821692505f916200420e91600160401b9004164262005314565b90505b846001600160401b0316846001600160401b03161462004297576001600160401b038085165f9081526003890160205260409020600181015490911682101562004272576001810154600160401b90046001600160401b0316945062004290565b6200427e868662005236565b6001600160401b031693505062004297565b5062004211565b5f620042a4848462005314565b9050838110156200430257808403600c8111620042c25780620042c5565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620042f757620042f76200528f565b046086555062004379565b838103600c811162004315578062004318565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a764000002816200435157620043516200528f565b04905080608654670de0b6b3a764000002816200437257620043726200528f565b0460865550505b683635c9adc5dea000006086541115620043a057683635c9adc5dea00000608655620043b8565b633b9aca006086541015620043b857633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002efa5760068101545f906200440c90600160c01b90046001600160401b0316600162005135565b90506200441a8282620034a8565b15620018445760068201545f9060029062004447908490600160801b90046001600160401b031662005236565b62004453919062005451565b6200445f908362005135565b90506200446d8382620034a8565b156200447f5762001648838262003d08565b62001648838362003d08565b606f5460ff16620044af57604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b5f8281526034602090815260408083206001600160a01b038516845290915290205460ff166200184457604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620016489084906200466f565b606f5460ff1615620045b457604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b03831610801562004621575067ffffffff00000001604083901c6001600160401b0316105b801562004642575067ffffffff00000001608083901c6001600160401b0316105b80156200465a575067ffffffff0000000160c083901c105b156200466857506001919050565b505f919050565b5f620046c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620047479092919063ffffffff16565b805190915015620016485780806020019051810190620046e6919062005430565b620016485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000cb0565b60606200475784845f856200475f565b949350505050565b606082471015620047c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000cb0565b5f80866001600160a01b03168587604051620047df9190620053d7565b5f6040518083038185875af1925050503d805f81146200481b576040519150601f19603f3d011682016040523d82523d5f602084013e62004820565b606091505b509150915062001ea28783838760608315620048a05782515f0362004898576001600160a01b0385163b620048985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000cb0565b508162004757565b620047578383815115620048b75781518083602001fd5b8060405162461bcd60e51b815260040162000cb0919062004e1d565b61091d806200547a83390190565b6001600160a01b038116811462002efa575f80fd5b80356001600160401b038116811462003556575f80fd5b5f805f805f805f805f806101408b8d03121562004928575f80fd5b8a356200493581620048e1565b99506200494560208c01620048f6565b98506200495560408c01620048f6565b975060608b01356200496781620048e1565b965060808b01356200497981620048e1565b955060a08b01356200498b81620048e1565b945060c08b01356200499d81620048e1565b935060e08b0135620049af81620048e1565b9250620049c06101008c01620048f6565b9150620049d16101208c01620048f6565b90509295989b9194979a5092959850565b803563ffffffff8116811462003556575f80fd5b5f806040838503121562004a08575f80fd5b62004a1383620049e2565b915062004a2360208401620048f6565b90509250929050565b5f6020828403121562004a3d575f80fd5b6200120d82620049e2565b80610300810183101562001210575f80fd5b5f805f805f805f806103e0898b03121562004a73575f80fd5b62004a7e89620049e2565b975062004a8e60208a01620048f6565b965062004a9e60408a01620048f6565b955062004aae60608a01620048f6565b945062004abe60808a01620048f6565b935060a0890135925060c0890135915062004add8a60e08b0162004a48565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004b05575f80fd5b62004b1089620049e2565b975062004b2060208a01620048f6565b965062004b3060408a01620048f6565b955062004b4060608a01620048f6565b94506080890135935060a0890135925060c089013562004b6081620048e1565b915062004add8a60e08b0162004a48565b5f6020828403121562004b82575f80fd5b813561ffff8116811462004b94575f80fd5b9392505050565b5f6020828403121562004bac575f80fd5b5035919050565b5f806040838503121562004bc5575f80fd5b82359150602083013562004bd981620048e1565b809150509250929050565b5f6020828403121562004bf5575f80fd5b6200120d82620048f6565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262004c24575f80fd5b81356001600160401b038082111562004c415762004c4162004c00565b604051601f8301601f19908116603f0116810190828211818310171562004c6c5762004c6c62004c00565b8160405283815286602085880101111562004c85575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562004cbb575f80fd5b62004cc688620049e2565b965062004cd660208901620048f6565b9550604088013562004ce881620048e1565b9450606088013562004cfa81620048e1565b9350608088013562004d0c81620048e1565b925060a08801356001600160401b038082111562004d28575f80fd5b62004d368b838c0162004c14565b935060c08a013591508082111562004d4c575f80fd5b5062004d5b8a828b0162004c14565b91505092959891949750929550565b5f805f805f8060c0878903121562004d80575f80fd5b62004d8b87620049e2565b955062004d9b60208801620048f6565b945062004dab60408801620048f6565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004de857818101518382015260200162004dce565b50505f910152565b5f815180845262004e0981602086016020860162004dcc565b601f01601f19169290920160200192915050565b602081525f6200120d602083018462004df0565b5f806040838503121562004e43575f80fd5b62004e4e83620048f6565b946020939093013593505050565b5f805f806060858703121562004e70575f80fd5b843562004e7d81620048e1565b935062004e8d60208601620049e2565b925060408501356001600160401b038082111562004ea9575f80fd5b818701915087601f83011262004ebd575f80fd5b81358181111562004ecc575f80fd5b88602082850101111562004ede575f80fd5b95989497505060200194505050565b5f6020828403121562004efe575f80fd5b813562004b9481620048e1565b803560ff8116811462003556575f80fd5b5f805f805f8060c0878903121562004f32575f80fd5b863562004f3f81620048e1565b9550602087013562004f5181620048e1565b945062004f6160408801620048f6565b935062004f7160608801620048f6565b92506080870135915062004f8860a0880162004f0b565b90509295509295509295565b5f805f805f8060c0878903121562004faa575f80fd5b863562004fb781620048e1565b9550602087013562004fc981620048e1565b945062004fd960408801620048f6565b935062004fe96060880162004f0b565b92506080870135915060a08701356001600160401b038111156200500b575f80fd5b6200501989828a0162004c14565b9150509295509295509295565b80545f90600181811c90808316806200504057607f831692505b602080841082036200506057634e487b7160e01b5f52602260045260245ffd5b838852602088018280156200507e57600181146200509557620050c0565b60ff198716825285151560051b82019750620050c0565b5f898152602090205f5b87811015620050ba578154848201529086019084016200509f565b83019850505b5050505050505092915050565b5f6001600160a01b03808816835280871660208401525060a06040830152620050fa60a083018662005026565b82810360608401526200510e818662005026565b9150508260808301529695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111562005158576200515862005121565b5092915050565b808202811582820484141762001210576200121062005121565b5f63ffffffff80831681810362005194576200519462005121565b6001019392505050565b5f6001600160a01b03808616835280851660208401525060606040830152620051cb606083018462004df0565b95945050505050565b5f6001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200521560c083018562004df0565b82810360a084015262005229818562004df0565b9998505050505050505050565b6001600160401b0382811682821603908082111562005158576200515862005121565b5f6001600160401b0380831681810362005194576200519462005121565b5f6020828403121562005288575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82620052b457620052b46200528f565b500490565b8082018082111562001210576200121062005121565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620052f757620052f762005121565b5060010190565b5f826200530f576200530f6200528f565b500690565b8181038181111562001210576200121062005121565b5f816200533b576200533b62005121565b505f190190565b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f6001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a0830152620053cb60c083018462004df0565b98975050505050505050565b5f8251620053ea81846020870162004dcc565b9190910192915050565b6103208101610300808584378201835f5b60018110156200542657815183526020928301929091019060010162005405565b5050509392505050565b5f6020828403121562005441575f80fd5b8151801515811462004b94575f80fd5b5f6001600160401b03808416806200546d576200546d6200528f565b9216919091049291505056fe60a06040526040516200091d3803806200091d833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f80516020620008fd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f80516020620008fd83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b608051610479620004845f395f601001526104795ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610081575f357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007957610077610085565b565b610077610095565b6100775b6100776100906100c3565b6100fa565b5f806100a43660048184610313565b8101906100b1919061034e565b915091506100bf8282610118565b5050565b5f6100f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e808015610114573d5ff35b3d5ffd5b61012182610172565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561016a5761016582826101fa565b505050565b6100bf61026c565b806001600160a01b03163b5f036101ac57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516102169190610417565b5f60405180830381855af49150503d805f811461024e576040519150601f19603f3d011682016040523d82523d5f602084013e610253565b606091505b509150915061026385838361028b565b95945050505050565b34156100775760405163b398979f60e01b815260040160405180910390fd5b6060826102a05761029b826102ea565b6102e3565b81511580156102b757506001600160a01b0384163b155b156102e057604051639996b31560e01b81526001600160a01b03851660048201526024016101a3565b50805b9392505050565b8051156102fa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8085851115610321575f80fd5b8386111561032d575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561035f575f80fd5b82356001600160a01b0381168114610375575f80fd5b9150602083013567ffffffffffffffff80821115610391575f80fd5b818501915085601f8301126103a4575f80fd5b8135818111156103b6576103b661033a565b604051601f8201601f19908116603f011681019083821181831017156103de576103de61033a565b816040528281528860208487010111156103f6575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610436576020818601810151858301520161041c565b505f92019182525091905056fea264697066735822122021e23b4641727aa4aa8fd2d3ef7960a43cab420d4c8632503bedc3eb2d30690764736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212202ebb683450d7b4e6eb4bdbede3ecde1b348bfc9d8d354de2b24c7938858af51364736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonRollupManagerMock.json b/compiled-contracts/PolygonRollupManagerMock.json index f24b33b24..5dc98718f 100644 --- a/compiled-contracts/PolygonRollupManagerMock.json +++ b/compiled-contracts/PolygonRollupManagerMock.json @@ -2016,8 +2016,8 @@ "type": "function" } ], - "bytecode": "0x60e060405234801562000010575f80fd5b50604051620061893803806200618983398101604081905262000033916200013c565b6001600160a01b0380841660805280831660c052811660a0528282826200005962000065565b5050505050506200018d565b5f54610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116101562000122575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000139575f80fd5b50565b5f805f606084860312156200014f575f80fd5b83516200015c8162000124565b60208501519093506200016f8162000124565b6040850151909250620001828162000124565b809150509250925092565b60805160a05160c051615f99620001f05f395f81816109d2015281816122910152613b0d01525f818161079a01528181612de50152613dfb01525f818161092c015281816112e90152818161149101528181611f7b0152613cf00152615f995ff3fe608060405234801562000010575f80fd5b5060043610620002b4575f3560e01c80630645af0914620002b8578063066ec01214620002d1578063080b311114620002fd5780630a0d9fbe14620003255780630e36f582146200034057806311f6b287146200035757806312b86e19146200036e5780631489ed10146200038557806315064c96146200039c5780631608859c14620003aa5780631796a1ae14620003c15780631816b7e514620003e85780632072f6c514620003ff578063248a9ca3146200040957806325280169146200042f5780632f2ff15d14620004e357806330c27dde14620004fa57806336568abe146200050e578063394218e91462000525578063477fa270146200053c57806355a71ee0146200054557806360469169146200058857806365c0504d14620005925780637222020f1462000640578063727885e914620006575780637975fcfe146200066e5780637fb6e76a1462000694578063841b24d714620006bc57806387c20c0114620006d75780638bd4f07114620006ee5780638f698ec5146200070557806391d14854146200071c57806399f5634e14620007335780639a908e73146200073d5780639c9f3dfe1462000754578063a066215c146200076b578063a217fddf1462000782578063a2967d99146200078a578063a3c573eb1462000794578063afd23cbe14620007cb578063b99d0ad714620007f5578063c1acbc3414620008cc578063c4c928c214620008e7578063ceee281d14620008fe578063d02103ca1462000926578063d5073f6f146200094e578063d547741f1462000965578063d939b315146200097c578063dbc169761462000990578063dde0ff77146200099a578063e0bfd3d214620009b5578063e46761c414620009cc578063f34eb8eb14620009f4578063f4e926751462000a0b578063f9c4c2ae1462000a1c575b5f80fd5b620002cf620002c936600462004795565b62000b32565b005b608454620002e5906001600160401b031681565b604051620002f491906200486a565b60405180910390f35b620003146200030e36600462004892565b62000f61565b6040519015158152602001620002f4565b608554620002e590600160401b90046001600160401b031681565b620002cf62000351366004620048c8565b62000f8a565b620002e5620003683660046200494f565b62001221565b620002cf6200037f3660046200497d565b62001240565b620002cf6200039636600462004a0f565b620013e8565b606f54620003149060ff1681565b620002cf620003bb36600462004892565b62001570565b607e54620003d29063ffffffff1681565b60405163ffffffff9091168152602001620002f4565b620002cf620003f936600462004a94565b62001603565b620002cf620016ae565b620004206200041a36600462004abe565b62001773565b604051908152602001620002f4565b620004af6200044036600462004892565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620002f4565b620002cf620004f436600462004ad6565b62001787565b608754620002e5906001600160401b031681565b620002cf6200051f36600462004ad6565b620017a9565b620002cf6200053636600462004b07565b620017e3565b60865462000420565b620004206200055636600462004892565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b6200042062001891565b620005f6620005a33660046200494f565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620002f4565b620002cf620006513660046200494f565b620018a8565b620002cf6200066836600462004bdc565b62001990565b620006856200067f36600462004ca2565b62001ddb565b604051620002f4919062004d55565b620003d2620006a536600462004b07565b60836020525f908152604090205463ffffffff1681565b608454620002e590600160c01b90046001600160401b031681565b620002cf620006e836600462004a0f565b62001e0d565b620002cf620006ff3660046200497d565b62002128565b620002cf6200071636600462004d69565b620021df565b620003146200072d36600462004ad6565b62002263565b620004206200228d565b620002e56200074e36600462004e14565b62002373565b620002cf6200076536600462004b07565b6200253a565b620002cf6200077c36600462004b07565b620025dc565b620004205f81565b620004206200267a565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b604051620002f4919062004e3f565b608554620007e190600160801b900461ffff1681565b60405161ffff9091168152602001620002f4565b6200088a6200080636600462004892565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620002f4919081516001600160401b03908116825260208084015190911690820152604082810151908201526060918201519181019190915260800190565b608454620002e590600160801b90046001600160401b031681565b620002cf620008f836600462004e53565b62002a2f565b620003d26200090f36600462004ee4565b60826020525f908152604090205463ffffffff1681565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf6200095f36600462004abe565b62002cf2565b620002cf6200097636600462004ad6565b62002d7c565b608554620002e5906001600160401b031681565b620002cf62002d9e565b608454620002e590600160401b90046001600160401b031681565b620002cf620009c636600462004f13565b62002e57565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf62000a0536600462004f8b565b62002f19565b608054620003d29063ffffffff1681565b62000ab262000a2d3660046200494f565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620002f4565b5f54600290610100900460ff1615801562000b5357505f5460ff8083169116105b62000b7b5760405162461bcd60e51b815260040162000b72906200501d565b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b17905562000bfb620030fb565b62000c155f8051602062005f448339815191528c62003167565b62000c215f8862003167565b62000c3b5f8051602062005e248339815191528862003167565b62000c555f8051602062005ea48339815191528862003167565b62000c6f5f8051602062005dc48339815191528862003167565b62000c895f8051602062005e048339815191528962003167565b62000ca35f8051602062005f248339815191528962003167565b62000cbd5f8051602062005e448339815191528962003167565b62000cd75f8051602062005ec48339815191528962003167565b62000cff5f8051602062005f448339815191525f8051602062005da483398151915262003173565b62000d195f8051602062005da48339815191528962003167565b62000d335f8051602062005de48339815191528962003167565b62000d5b5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b62000d755f8051602062005f048339815191528762003167565b62000d8f5f8051602062005ee48339815191528762003167565b6073546074546001600160401b03600160401b9092048216911680821462000dca57604051632e4cc54360e11b815260040160405180910390fd5b5f62000def888888885f60745f9054906101000a90046001600160401b0316620031c6565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a166001600160401b03198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a59462000eec9493831693600160581b9004909216916076916077919060040162005112565b5f604051808303815f87803b15801562000f04575f80fd5b505af115801562000f17573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681525f8051602062005e848339815191529350602001915062000f4c9050565b60405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062000f819083620033e7565b90505b92915050565b5f54600290610100900460ff1615801562000fab57505f5460ff8083169116105b62000fca5760405162461bcd60e51b815260040162000b72906200501d565b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038a8116919091029190911790915567016345785d8a000060865588166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b1790556200104a620030fb565b620010645f8051602062005f448339815191528862003167565b620010705f8462003167565b6200108a5f8051602062005e248339815191528462003167565b620010a45f8051602062005ea48339815191528462003167565b620010be5f8051602062005dc48339815191528462003167565b620010d85f8051602062005e048339815191528562003167565b620010f25f8051602062005f248339815191528562003167565b6200110c5f8051602062005e448339815191528562003167565b620011265f8051602062005ec48339815191528562003167565b6200114e5f8051602062005f448339815191525f8051602062005da483398151915262003173565b620011685f8051602062005da48339815191528562003167565b620011825f8051602062005de48339815191528562003167565b620011aa5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b620011c45f8051602062005f048339815191528362003167565b620011de5f8051602062005ee48339815191528362003167565b620011ea5f3362003167565b5f805461ff001916905560405160ff821681525f8051602062005e848339815191529060200160405180910390a150505050505050565b63ffffffff81165f90815260816020526040812062000f84906200342b565b5f8051602062005f448339815191526200125a816200349a565b63ffffffff89165f90815260816020526040902062001280818a8a8a8a8a8a8a620034a6565b600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012e7576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620013206200267a565b6040518263ffffffff1660e01b81526004016200133f91815260200190565b5f604051808303815f87803b15801562001357575f80fd5b505af11580156200136a573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b5f8051602062005f4483398151915262001402816200349a565b63ffffffff89165f90815260816020526040902062001428818a8a8a8a8a8a8a62003822565b600681018054600160401b600160801b031916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b900416156200148f576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014c86200267a565b6040518263ffffffff1660e01b8152600401620014e791815260200190565b5f604051808303815f87803b158015620014ff575f80fd5b505af115801562001512573d5f803e3d5ffd5b50505050336001600160a01b03168a63ffffffff167fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d389888a6040516200155c9392919062005166565b60405180910390a350505050505050505050565b63ffffffff82165f9081526081602052604090206200159e5f8051602062005f448339815191523362002263565b620015f257606f5460ff1615620015c857604051630bc011ff60e21b815260040160405180910390fd5b620015d48183620033e7565b620015f257604051630674f25160e11b815260040160405180910390fd5b620015fe818362003c0e565b505050565b5f8051602062005ec48339815191526200161d816200349a565b6103e88261ffff1610806200163757506103ff8261ffff16115b156200165657604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b620016c85f8051602062005f048339815191523362002263565b6200176757608454600160801b90046001600160401b0316158062001718575060845442906200170d9062093a8090600160801b90046001600160401b03166200519b565b6001600160401b0316115b8062001748575060875442906200173d9062093a80906001600160401b03166200519b565b6001600160401b0316115b15620017675760405163692baaad60e11b815260040160405180910390fd5b6200177162003df9565b565b5f9081526034602052604090206001015490565b620017928262001773565b6200179d816200349a565b620015fe838362003e73565b6001600160a01b0381163314620017d357604051630b4ad1cd60e31b815260040160405180910390fd5b620017df828262003ede565b5050565b5f8051602062005ec4833981519152620017fd816200349a565b606f5460ff166200183f576084546001600160401b03600160c01b9091048116908316106200183f5760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516021790556040517f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190620016a29084906200486a565b5f6086546064620018a39190620051c5565b905090565b5f8051602062005e04833981519152620018c2816200349a565b63ffffffff82161580620018e15750607e5463ffffffff908116908316115b156200190057604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff16151590036200194657604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b5f8051602062005f24833981519152620019aa816200349a565b63ffffffff88161580620019c95750607e5463ffffffff908116908916115b15620019e857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001a2e57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001a6b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001a859063ffffffff16620051df565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001ad2906200475b565b62001ae09392919062005204565b604051809103905ff08015801562001afa573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001d5e949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001d9e908d908d9088908e908e908e906004016200523a565b5f604051808303815f87803b15801562001db6575f80fd5b505af115801562001dc9573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001e0290878787878762003f47565b979650505050505050565b606f5460ff161562001e3257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001e8092600160c01b9004811691166200519b565b6001600160401b0316111562001ea957604051638a0704d360e01b815260040160405180910390fd5b6103e862001eb888886200529c565b6001600160401b0316111562001ee157604051635acfba9d60e11b815260040160405180910390fd5b62001ef3818989898989898962003822565b62001eff818762004081565b6085546001600160401b03165f036200200657600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562001f79576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001fb26200267a565b6040518263ffffffff1660e01b815260040162001fd191815260200190565b5f604051808303815f87803b15801562001fe9575f80fd5b505af115801562001ffc573d5f803e3d5ffd5b50505050620020cf565b620020118162004278565b600681018054600160801b90046001600160401b03169060106200203583620052bf565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b336001600160a01b03168963ffffffff167faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b4888789604051620021159392919062005166565b60405180910390a3505050505050505050565b606f5460ff16156200214d57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f908152608160205260409020620021738189898989898989620034a6565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620021d462003df9565b505050505050505050565b80516080805463ffffffff191663ffffffff9092169190911790555f5b8151811015620017df578181815181106200221b576200221b620052e5565b602002602001015160815f836001620022359190620052f9565b63ffffffff16815260208101919091526040015f2060050155806200225a816200530f565b915050620021fc565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401620022dd919062004e3f565b602060405180830381865afa158015620022f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231f91906200532a565b6084549091505f9062002345906001600160401b03600160401b8204811691166200529c565b6001600160401b03169050805f0362002360575f9250505090565b6200236c818362005356565b9250505090565b606f545f9060ff16156200239a57604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023d1576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023fb57604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242d9084906001600160401b03166200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200246287836200519b565b6006840180546001600160401b038084166001600160401b03199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024f08362004278565b8363ffffffff167f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a25826040516200252891906200486a565b60405180910390a29695505050505050565b5f8051602062005ec483398151915262002554816200349a565b606f5460ff166200258f576085546001600160401b03908116908316106200258f5760405163048a05a960e41b815260040160405180910390fd5b608580546001600160401b0319166001600160401b0384161790556040517fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590620016a29084906200486a565b5f8051602062005ec4833981519152620025f6816200349a565b62015180826001600160401b031611156200262457604051631c0cfbfd60e31b815260040160405180910390fd5b60858054600160401b600160801b031916600160401b6001600160401b038516021790556040517f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890620016a29084906200486a565b6080545f9063ffffffff168082036200269457505f919050565b5f816001600160401b03811115620026b057620026b062004b23565b604051908082528060200260200182016040528015620026da578160200160208202803683370190505b5090505f5b828110156200274a5760815f620026f8836001620052f9565b63ffffffff1663ffffffff1681526020019081526020015f20600501548282815181106200272a576200272a620052e5565b60209081029190910101528062002741816200530f565b915050620026df565b505f60205b836001146200298a575f620027666002866200536c565b6200277360028762005356565b6200277f9190620052f9565b90505f816001600160401b038111156200279d576200279d62004b23565b604051908082528060200260200182016040528015620027c7578160200160208202803683370190505b5090505f5b828110156200293e57620027e260018462005382565b81148015620027fd5750620027f96002886200536c565b6001145b156200287d578562002811826002620051c5565b81518110620028245762002824620052e5565b6020026020010151856040516020016200284092919062005398565b604051602081830303815290604052805190602001208282815181106200286b576200286b620052e5565b60200260200101818152505062002929565b856200288b826002620051c5565b815181106200289e576200289e620052e5565b602002602001015186826002620028b69190620051c5565b620028c3906001620052f9565b81518110620028d657620028d6620052e5565b6020026020010151604051602001620028f192919062005398565b604051602081830303815290604052805190602001208282815181106200291c576200291c620052e5565b6020026020010181815250505b8062002935816200530f565b915050620027cc565b5080945081955083846040516020016200295a92919062005398565b60405160208183030381529060405280519060200120935082806200297f90620053a6565b93505050506200274f565b5f835f81518110620029a057620029a0620052e5565b602002602001015190505f5b8281101562002a25578184604051602001620029ca92919062005398565b6040516020818303038152906040528051906020012091508384604051602001620029f792919062005398565b604051602081830303815290604052805190602001209350808062002a1c906200530f565b915050620029ac565b5095945050505050565b5f8051602062005dc483398151915262002a49816200349a565b63ffffffff8416158062002a685750607e5463ffffffff908116908516115b1562002a8757604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002ac7576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b1557604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002b5b57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002b9957604051635aa0d5f160e11b815260040160405180910390fd5b6001808201805491840180546001600160a01b031981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416026001600160e01b0319909216909217179055600782018054600160401b63ffffffff8a1602600160401b600160801b03199091161790555f62002c188462001221565b6007840180546001600160401b0319166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002c6d9216908b908b90600401620053be565b5f604051808303815f87803b15801562002c85575f80fd5b505af115801562002c98573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b5f8051602062005de483398151915262002d0c816200349a565b683635c9adc5dea0000082118062002d275750633b9aca0082105b1562002d4657604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016a2565b62002d878262001773565b62002d92816200349a565b620015fe838362003ede565b5f8051602062005e4483398151915262002db8816200349a565b608780546001600160401b031916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002e33575f80fd5b505af115801562002e46573d5f803e3d5ffd5b5050505062002e5462004341565b50565b5f8051602062005ea483398151915262002e71816200349a565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002eae576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002eeb57604051630d409b9360e41b815260040160405180910390fd5b5f62002efc88888888875f620031c6565b5f8080526002909101602052604090209390935550505050505050565b5f8051602062005e2483398151915262002f33816200349a565b607e80545f9190829062002f4d9063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030e996959493929190620053fd565b60405180910390a25050505050505050565b5f54610100900460ff16620017715760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000b72565b620017df828262003e73565b5f6200317f8362001773565b5f84815260346020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620031e19063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620033d49594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034199291811691166200519b565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200347d575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002e54813362004399565b60078801545f906001600160401b039081169087161015620034db5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200357b5760068901546001600160401b03600160801b90910481169089161115620035255760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200357457604051632bd2e3e760e01b815260040160405180910390fd5b50620035ef565b506001600160401b0385165f90815260028901602052604090205480620035b5576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620035ef57604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036285750876001600160401b0316876001600160401b031611155b806200364c575060068901546001600160401b03600160c01b909104811690881611155b156200366b5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b9004811690861614620036b1576040516332a2a77f60e01b815260040160405180910390fd5b5f620036c28a888888868962003f47565b90505f5f8051602062005e64833981519152600283604051620036e6919062005449565b602060405180830381855afa15801562003702573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200372791906200532a565b6200373391906200536c565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a91620037779188919060040162005466565b602060405180830381865afa15801562003793573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037b99190620054a2565b620037d7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038155760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f806200382f8a6200342b565b60078b01549091506001600160401b039081169089161015620038655760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039075760068a01546001600160401b03600160801b9091048116908a161115620038af5760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b90920416146200390057604051632bd2e3e760e01b815260040160405180910390fd5b5062003976565b6001600160401b0388165f90815260028b01602052604090205491508162003942576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200397657604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b031611620039a95760405163b9b18f5760e01b815260040160405180910390fd5b5f620039ba8b8a8a8a878b62003f47565b90505f5f8051602062005e64833981519152600283604051620039de919062005449565b602060405180830381855afa158015620039fa573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003a1f91906200532a565b62003a2b91906200536c565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003a6f9189919060040162005466565b602060405180830381865afa15801562003a8b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003ab19190620054a2565b62003acf576040516309bde33960e01b815260040160405180910390fd5b5f62003adc848b6200529c565b905062003b3587826001600160401b031662003af76200228d565b62003b039190620051c5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190620043c3565b80608460088282829054906101000a90046001600160401b031662003b5b91906200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560848054600160801b600160c01b031916600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003be8575f80fd5b505af115801562003bfb573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003c4d575060068201546001600160401b03600160801b9091048116908216115b1562003c6c5760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f81815260048501602090815260408083208054600689018054600160401b600160801b031916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003d276200267a565b6040518263ffffffff1660e01b815260040162003d4691815260200190565b5f604051808303815f87803b15801562003d5e575f80fd5b505af115801562003d71573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003e52575f80fd5b505af115801562003e65573d5f803e3d5ffd5b505050506200177162004417565b62003e7f828262002263565b620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b62003eea828262002263565b15620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f818152600389016020526040808220549388168252902054606092911580159062003f7c575081155b1562003f9b5760405163340c614f60e11b815260040160405180910390fd5b8062003fba576040516366385b5160e01b815260040160405180910390fd5b62003fc58462004473565b62003fe3576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516001600160601b03193360601b16602082015260348101889052605481018590526001600160c01b031960c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f6200408d836200342b565b9050815f806200409e84846200529c565b6085546001600160401b0391821692505f91620040c491600160401b9004164262005382565b90505b846001600160401b0316846001600160401b0316146200414d576001600160401b038085165f9081526003890160205260409020600181015490911682101562004128576001810154600160401b90046001600160401b0316945062004146565b6200413486866200529c565b6001600160401b03169350506200414d565b50620040c7565b5f6200415a848462005382565b905083811015620041b857808403600c81116200417857806200417b565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620041ad57620041ad62005342565b04608655506200422f565b838103600c8111620041cb5780620041ce565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004207576200420762005342565b04905080608654670de0b6b3a7640000028162004228576200422862005342565b0460865550505b683635c9adc5dea0000060865411156200425657683635c9adc5dea000006086556200426e565b633b9aca0060865410156200426e57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002e545760068101545f90620042c290600160c01b90046001600160401b031660016200519b565b9050620042d08282620033e7565b15620017df5760068201545f90600290620042fd908490600160801b90046001600160401b03166200529c565b620043099190620054c3565b6200431590836200519b565b9050620043238382620033e7565b156200433557620015fe838262003c0e565b620015fe838362003c0e565b606f5460ff166200436557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b620043a5828262002263565b620017df57604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052620015fe908490620044f7565b606f5460ff16156200443c57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b038316108015620044a9575067ffffffff00000001604083901c6001600160401b0316105b8015620044ca575067ffffffff00000001608083901c6001600160401b0316105b8015620044e2575067ffffffff0000000160c083901c105b15620044f057506001919050565b505f919050565b5f6200454d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620045cf9092919063ffffffff16565b805190915015620015fe57808060200190518101906200456e9190620054a2565b620015fe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000b72565b6060620045df84845f85620045e7565b949350505050565b6060824710156200464a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000b72565b5f80866001600160a01b0316858760405162004667919062005449565b5f6040518083038185875af1925050503d805f8114620046a3576040519150601f19603f3d011682016040523d82523d5f602084013e620046a8565b606091505b509150915062001e028783838760608315620047285782515f0362004720576001600160a01b0385163b620047205760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000b72565b5081620045df565b620045df83838151156200473f5781518083602001fd5b8060405162461bcd60e51b815260040162000b72919062004d55565b6108b880620054ec83390190565b6001600160a01b038116811462002e54575f80fd5b80356001600160401b038116811462003495575f80fd5b5f805f805f805f805f806101408b8d031215620047b0575f80fd5b8a35620047bd8162004769565b9950620047cd60208c016200477e565b9850620047dd60408c016200477e565b975060608b0135620047ef8162004769565b965060808b0135620048018162004769565b955060a08b0135620048138162004769565b945060c08b0135620048258162004769565b935060e08b0135620048378162004769565b9250620048486101008c016200477e565b9150620048596101208c016200477e565b90509295989b9194979a5092959850565b6001600160401b0391909116815260200190565b803563ffffffff8116811462003495575f80fd5b5f8060408385031215620048a4575f80fd5b620048af836200487e565b9150620048bf602084016200477e565b90509250929050565b5f805f805f8060c08789031215620048de575f80fd5b8635620048eb8162004769565b9550620048fb602088016200477e565b94506200490b604088016200477e565b935060608701356200491d8162004769565b925060808701356200492f8162004769565b915060a0870135620049418162004769565b809150509295509295509295565b5f6020828403121562004960575f80fd5b62000f81826200487e565b80610300810183101562000f84575f80fd5b5f805f805f805f806103e0898b03121562004996575f80fd5b620049a1896200487e565b9750620049b160208a016200477e565b9650620049c160408a016200477e565b9550620049d160608a016200477e565b9450620049e160808a016200477e565b935060a0890135925060c0890135915062004a008a60e08b016200496b565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004a28575f80fd5b62004a33896200487e565b975062004a4360208a016200477e565b965062004a5360408a016200477e565b955062004a6360608a016200477e565b94506080890135935060a0890135925060c089013562004a838162004769565b915062004a008a60e08b016200496b565b5f6020828403121562004aa5575f80fd5b813561ffff8116811462004ab7575f80fd5b9392505050565b5f6020828403121562004acf575f80fd5b5035919050565b5f806040838503121562004ae8575f80fd5b82359150602083013562004afc8162004769565b809150509250929050565b5f6020828403121562004b18575f80fd5b62000f81826200477e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171562004b625762004b6262004b23565b604052919050565b5f82601f83011262004b7a575f80fd5b81356001600160401b0381111562004b965762004b9662004b23565b62004bab601f8201601f191660200162004b37565b81815284602083860101111562004bc0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121562004bf3575f80fd5b62004bfe886200487e565b965062004c0e602089016200477e565b9550604088013562004c208162004769565b9450606088013562004c328162004769565b9350608088013562004c448162004769565b925060a08801356001600160401b038082111562004c60575f80fd5b62004c6e8b838c0162004b6a565b935060c08a013591508082111562004c84575f80fd5b5062004c938a828b0162004b6a565b91505092959891949750929550565b5f805f805f8060c0878903121562004cb8575f80fd5b62004cc3876200487e565b955062004cd3602088016200477e565b945062004ce3604088016200477e565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004d2057818101518382015260200162004d06565b50505f910152565b5f815180845262004d4181602086016020860162004d04565b601f01601f19169290920160200192915050565b602081525f62000f81602083018462004d28565b5f602080838503121562004d7b575f80fd5b82356001600160401b038082111562004d92575f80fd5b818501915085601f83011262004da6575f80fd5b81358181111562004dbb5762004dbb62004b23565b8060051b915062004dce84830162004b37565b818152918301840191848101908884111562004de8575f80fd5b938501935b8385101562004e085784358252938501939085019062004ded565b98975050505050505050565b5f806040838503121562004e26575f80fd5b62004e31836200477e565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f805f806060858703121562004e67575f80fd5b843562004e748162004769565b935062004e84602086016200487e565b925060408501356001600160401b038082111562004ea0575f80fd5b818701915087601f83011262004eb4575f80fd5b81358181111562004ec3575f80fd5b88602082850101111562004ed5575f80fd5b95989497505060200194505050565b5f6020828403121562004ef5575f80fd5b813562004ab78162004769565b803560ff8116811462003495575f80fd5b5f805f805f8060c0878903121562004f29575f80fd5b863562004f368162004769565b9550602087013562004f488162004769565b945062004f58604088016200477e565b935062004f68606088016200477e565b92506080870135915062004f7f60a0880162004f02565b90509295509295509295565b5f805f805f8060c0878903121562004fa1575f80fd5b863562004fae8162004769565b9550602087013562004fc08162004769565b945062004fd0604088016200477e565b935062004fe06060880162004f02565b92506080870135915060a08701356001600160401b0381111562005002575f80fd5b6200501089828a0162004b6a565b9150509295509295509295565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b80545f90600181811c90808316806200508557607f831692505b60208084108203620050a557634e487b7160e01b5f52602260045260245ffd5b83885260208801828015620050c35760018114620050da5762005105565b60ff198716825285151560051b8201975062005105565b5f898152602090205f5b87811015620050ff57815484820152908601908401620050e4565b83019850505b5050505050505092915050565b6001600160a01b0386811682528516602082015260a0604082018190525f906200513f908301866200506b565b82810360608401526200515381866200506b565b9150508260808301529695505050505050565b6001600160401b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115620051be57620051be62005187565b5092915050565b808202811582820484141762000f845762000f8462005187565b5f63ffffffff808316818103620051fa57620051fa62005187565b6001019392505050565b6001600160a01b038481168252831660208201526060604082018190525f90620052319083018462004d28565b95945050505050565b6001600160a01b038781168252868116602083015263ffffffff861660408301528416606082015260c0608082018190525f906200527b9083018562004d28565b82810360a08401526200528f818562004d28565b9998505050505050505050565b6001600160401b03828116828216039080821115620051be57620051be62005187565b5f6001600160401b038281166002600160401b03198101620051fa57620051fa62005187565b634e487b7160e01b5f52603260045260245ffd5b8082018082111562000f845762000f8462005187565b5f6001820162005323576200532362005187565b5060010190565b5f602082840312156200533b575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f8262005367576200536762005342565b500490565b5f826200537d576200537d62005342565b500690565b8181038181111562000f845762000f8462005187565b918252602082015260400190565b5f81620053b757620053b762005187565b505f190190565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b6001600160a01b038781168252861660208201526001600160401b038516604082015260ff841660608201526080810183905260c060a082018190525f9062004e089083018462004d28565b5f82516200545c81846020870162004d04565b9190910192915050565b6103208101610300808584378201835f5b60018110156200549857815183526020928301929091019060010162005477565b5050509392505050565b5f60208284031215620054b3575f80fd5b8151801515811462004ab7575f80fd5b5f6001600160401b0383811680620054df57620054df62005342565b9216919091049291505056fe60a06040526040516108b83803806108b883398101604081905261002291610349565b828161002e8282610056565b50506001600160a01b03821660805261004e61004960805190565b6100b4565b50505061042e565b61005f82610121565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100a8576100a3828261019f565b505050565b6100b0610212565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100f35f80516020610898833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161011e81610233565b50565b806001600160a01b03163b5f0361015b57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b0316846040516101bb9190610413565b5f60405180830381855af49150503d805f81146101f3576040519150601f19603f3d011682016040523d82523d5f602084013e6101f8565b606091505b509092509050610209858383610270565b95945050505050565b34156102315760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661025c57604051633173bdd160e11b81525f6004820152602401610152565b805f8051602061089883398151915261017e565b60608261028557610280826102cf565b6102c8565b815115801561029c57506001600160a01b0384163b155b156102c557604051639996b31560e01b81526001600160a01b0385166004820152602401610152565b50805b9392505050565b8051156102df5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461030e575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015610341578181015183820152602001610329565b50505f910152565b5f805f6060848603121561035b575f80fd5b610364846102f8565b9250610372602085016102f8565b60408501519092506001600160401b038082111561038e575f80fd5b818601915086601f8301126103a1575f80fd5b8151818111156103b3576103b3610313565b604051601f8201601f19908116603f011681019083821181831017156103db576103db610313565b816040528281528960208487010111156103f3575f80fd5b610404836020830160208801610327565b80955050505050509250925092565b5f8251610424818460208701610327565b9190910192915050565b6080516104536104455f395f601001526104535ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610069575f356001600160e01b03191663278f794360e11b146100615761005f61006d565b565b61005f61007d565b61005f5b61005f6100786100ab565b6100cf565b5f8061008c36600481846102ba565b81019061009991906102f5565b915091506100a782826100ed565b5050565b5f6100ca5f805160206103fe833981519152546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156100e9573d5ff35b3d5ffd5b6100f682610147565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561013f5761013a82826101aa565b505050565b6100a761021c565b806001600160a01b03163b5f0361017c5780604051634c9c8ce360e01b815260040161017391906103bd565b60405180910390fd5b5f805160206103fe83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516101c691906103d1565b5f60405180830381855af49150503d805f81146101fe576040519150601f19603f3d011682016040523d82523d5f602084013e610203565b606091505b509150915061021385838361023b565b95945050505050565b341561005f5760405163b398979f60e01b815260040160405180910390fd5b6060826102505761024b82610291565b61028a565b815115801561026757506001600160a01b0384163b155b156102875783604051639996b31560e01b815260040161017391906103bd565b50805b9392505050565b8051156102a15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f80858511156102c8575f80fd5b838611156102d4575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610306575f80fd5b82356001600160a01b038116811461031c575f80fd5b915060208301356001600160401b0380821115610337575f80fd5b818501915085601f83011261034a575f80fd5b81358181111561035c5761035c6102e1565b604051601f8201601f19908116603f01168101908382118183101715610384576103846102e1565b8160405282815288602084870101111561039c575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b5f82515f5b818110156103f057602081860181015185830152016103d6565b505f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220d3b91b386436af95579d7d767b3c6e83ae79b09bd8dd9344bddb95185404c56564736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610373cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f066156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fbab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bdac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024983dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68ea5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db19b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff285951141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545ea0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4a2646970667358221220d252de4a6f3c7e85fc1b591e20f22391ceda3169df698c1a2ae8dd6cdb2d9da864736f6c63430008140033", - "deployedBytecode": "0x608060405234801562000010575f80fd5b5060043610620002b4575f3560e01c80630645af0914620002b8578063066ec01214620002d1578063080b311114620002fd5780630a0d9fbe14620003255780630e36f582146200034057806311f6b287146200035757806312b86e19146200036e5780631489ed10146200038557806315064c96146200039c5780631608859c14620003aa5780631796a1ae14620003c15780631816b7e514620003e85780632072f6c514620003ff578063248a9ca3146200040957806325280169146200042f5780632f2ff15d14620004e357806330c27dde14620004fa57806336568abe146200050e578063394218e91462000525578063477fa270146200053c57806355a71ee0146200054557806360469169146200058857806365c0504d14620005925780637222020f1462000640578063727885e914620006575780637975fcfe146200066e5780637fb6e76a1462000694578063841b24d714620006bc57806387c20c0114620006d75780638bd4f07114620006ee5780638f698ec5146200070557806391d14854146200071c57806399f5634e14620007335780639a908e73146200073d5780639c9f3dfe1462000754578063a066215c146200076b578063a217fddf1462000782578063a2967d99146200078a578063a3c573eb1462000794578063afd23cbe14620007cb578063b99d0ad714620007f5578063c1acbc3414620008cc578063c4c928c214620008e7578063ceee281d14620008fe578063d02103ca1462000926578063d5073f6f146200094e578063d547741f1462000965578063d939b315146200097c578063dbc169761462000990578063dde0ff77146200099a578063e0bfd3d214620009b5578063e46761c414620009cc578063f34eb8eb14620009f4578063f4e926751462000a0b578063f9c4c2ae1462000a1c575b5f80fd5b620002cf620002c936600462004795565b62000b32565b005b608454620002e5906001600160401b031681565b604051620002f491906200486a565b60405180910390f35b620003146200030e36600462004892565b62000f61565b6040519015158152602001620002f4565b608554620002e590600160401b90046001600160401b031681565b620002cf62000351366004620048c8565b62000f8a565b620002e5620003683660046200494f565b62001221565b620002cf6200037f3660046200497d565b62001240565b620002cf6200039636600462004a0f565b620013e8565b606f54620003149060ff1681565b620002cf620003bb36600462004892565b62001570565b607e54620003d29063ffffffff1681565b60405163ffffffff9091168152602001620002f4565b620002cf620003f936600462004a94565b62001603565b620002cf620016ae565b620004206200041a36600462004abe565b62001773565b604051908152602001620002f4565b620004af6200044036600462004892565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620002f4565b620002cf620004f436600462004ad6565b62001787565b608754620002e5906001600160401b031681565b620002cf6200051f36600462004ad6565b620017a9565b620002cf6200053636600462004b07565b620017e3565b60865462000420565b620004206200055636600462004892565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b6200042062001891565b620005f6620005a33660046200494f565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620002f4565b620002cf620006513660046200494f565b620018a8565b620002cf6200066836600462004bdc565b62001990565b620006856200067f36600462004ca2565b62001ddb565b604051620002f4919062004d55565b620003d2620006a536600462004b07565b60836020525f908152604090205463ffffffff1681565b608454620002e590600160c01b90046001600160401b031681565b620002cf620006e836600462004a0f565b62001e0d565b620002cf620006ff3660046200497d565b62002128565b620002cf6200071636600462004d69565b620021df565b620003146200072d36600462004ad6565b62002263565b620004206200228d565b620002e56200074e36600462004e14565b62002373565b620002cf6200076536600462004b07565b6200253a565b620002cf6200077c36600462004b07565b620025dc565b620004205f81565b620004206200267a565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b604051620002f4919062004e3f565b608554620007e190600160801b900461ffff1681565b60405161ffff9091168152602001620002f4565b6200088a6200080636600462004892565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620002f4919081516001600160401b03908116825260208084015190911690820152604082810151908201526060918201519181019190915260800190565b608454620002e590600160801b90046001600160401b031681565b620002cf620008f836600462004e53565b62002a2f565b620003d26200090f36600462004ee4565b60826020525f908152604090205463ffffffff1681565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf6200095f36600462004abe565b62002cf2565b620002cf6200097636600462004ad6565b62002d7c565b608554620002e5906001600160401b031681565b620002cf62002d9e565b608454620002e590600160401b90046001600160401b031681565b620002cf620009c636600462004f13565b62002e57565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf62000a0536600462004f8b565b62002f19565b608054620003d29063ffffffff1681565b62000ab262000a2d3660046200494f565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620002f4565b5f54600290610100900460ff1615801562000b5357505f5460ff8083169116105b62000b7b5760405162461bcd60e51b815260040162000b72906200501d565b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b17905562000bfb620030fb565b62000c155f8051602062005f448339815191528c62003167565b62000c215f8862003167565b62000c3b5f8051602062005e248339815191528862003167565b62000c555f8051602062005ea48339815191528862003167565b62000c6f5f8051602062005dc48339815191528862003167565b62000c895f8051602062005e048339815191528962003167565b62000ca35f8051602062005f248339815191528962003167565b62000cbd5f8051602062005e448339815191528962003167565b62000cd75f8051602062005ec48339815191528962003167565b62000cff5f8051602062005f448339815191525f8051602062005da483398151915262003173565b62000d195f8051602062005da48339815191528962003167565b62000d335f8051602062005de48339815191528962003167565b62000d5b5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b62000d755f8051602062005f048339815191528762003167565b62000d8f5f8051602062005ee48339815191528762003167565b6073546074546001600160401b03600160401b9092048216911680821462000dca57604051632e4cc54360e11b815260040160405180910390fd5b5f62000def888888885f60745f9054906101000a90046001600160401b0316620031c6565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a166001600160401b03198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a59462000eec9493831693600160581b9004909216916076916077919060040162005112565b5f604051808303815f87803b15801562000f04575f80fd5b505af115801562000f17573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681525f8051602062005e848339815191529350602001915062000f4c9050565b60405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062000f819083620033e7565b90505b92915050565b5f54600290610100900460ff1615801562000fab57505f5460ff8083169116105b62000fca5760405162461bcd60e51b815260040162000b72906200501d565b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038a8116919091029190911790915567016345785d8a000060865588166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b1790556200104a620030fb565b620010645f8051602062005f448339815191528862003167565b620010705f8462003167565b6200108a5f8051602062005e248339815191528462003167565b620010a45f8051602062005ea48339815191528462003167565b620010be5f8051602062005dc48339815191528462003167565b620010d85f8051602062005e048339815191528562003167565b620010f25f8051602062005f248339815191528562003167565b6200110c5f8051602062005e448339815191528562003167565b620011265f8051602062005ec48339815191528562003167565b6200114e5f8051602062005f448339815191525f8051602062005da483398151915262003173565b620011685f8051602062005da48339815191528562003167565b620011825f8051602062005de48339815191528562003167565b620011aa5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b620011c45f8051602062005f048339815191528362003167565b620011de5f8051602062005ee48339815191528362003167565b620011ea5f3362003167565b5f805461ff001916905560405160ff821681525f8051602062005e848339815191529060200160405180910390a150505050505050565b63ffffffff81165f90815260816020526040812062000f84906200342b565b5f8051602062005f448339815191526200125a816200349a565b63ffffffff89165f90815260816020526040902062001280818a8a8a8a8a8a8a620034a6565b600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012e7576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620013206200267a565b6040518263ffffffff1660e01b81526004016200133f91815260200190565b5f604051808303815f87803b15801562001357575f80fd5b505af11580156200136a573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b5f8051602062005f4483398151915262001402816200349a565b63ffffffff89165f90815260816020526040902062001428818a8a8a8a8a8a8a62003822565b600681018054600160401b600160801b031916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b900416156200148f576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014c86200267a565b6040518263ffffffff1660e01b8152600401620014e791815260200190565b5f604051808303815f87803b158015620014ff575f80fd5b505af115801562001512573d5f803e3d5ffd5b50505050336001600160a01b03168a63ffffffff167fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d389888a6040516200155c9392919062005166565b60405180910390a350505050505050505050565b63ffffffff82165f9081526081602052604090206200159e5f8051602062005f448339815191523362002263565b620015f257606f5460ff1615620015c857604051630bc011ff60e21b815260040160405180910390fd5b620015d48183620033e7565b620015f257604051630674f25160e11b815260040160405180910390fd5b620015fe818362003c0e565b505050565b5f8051602062005ec48339815191526200161d816200349a565b6103e88261ffff1610806200163757506103ff8261ffff16115b156200165657604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b620016c85f8051602062005f048339815191523362002263565b6200176757608454600160801b90046001600160401b0316158062001718575060845442906200170d9062093a8090600160801b90046001600160401b03166200519b565b6001600160401b0316115b8062001748575060875442906200173d9062093a80906001600160401b03166200519b565b6001600160401b0316115b15620017675760405163692baaad60e11b815260040160405180910390fd5b6200177162003df9565b565b5f9081526034602052604090206001015490565b620017928262001773565b6200179d816200349a565b620015fe838362003e73565b6001600160a01b0381163314620017d357604051630b4ad1cd60e31b815260040160405180910390fd5b620017df828262003ede565b5050565b5f8051602062005ec4833981519152620017fd816200349a565b606f5460ff166200183f576084546001600160401b03600160c01b9091048116908316106200183f5760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516021790556040517f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190620016a29084906200486a565b5f6086546064620018a39190620051c5565b905090565b5f8051602062005e04833981519152620018c2816200349a565b63ffffffff82161580620018e15750607e5463ffffffff908116908316115b156200190057604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff16151590036200194657604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b5f8051602062005f24833981519152620019aa816200349a565b63ffffffff88161580620019c95750607e5463ffffffff908116908916115b15620019e857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001a2e57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001a6b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001a859063ffffffff16620051df565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001ad2906200475b565b62001ae09392919062005204565b604051809103905ff08015801562001afa573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001d5e949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001d9e908d908d9088908e908e908e906004016200523a565b5f604051808303815f87803b15801562001db6575f80fd5b505af115801562001dc9573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001e0290878787878762003f47565b979650505050505050565b606f5460ff161562001e3257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001e8092600160c01b9004811691166200519b565b6001600160401b0316111562001ea957604051638a0704d360e01b815260040160405180910390fd5b6103e862001eb888886200529c565b6001600160401b0316111562001ee157604051635acfba9d60e11b815260040160405180910390fd5b62001ef3818989898989898962003822565b62001eff818762004081565b6085546001600160401b03165f036200200657600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562001f79576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001fb26200267a565b6040518263ffffffff1660e01b815260040162001fd191815260200190565b5f604051808303815f87803b15801562001fe9575f80fd5b505af115801562001ffc573d5f803e3d5ffd5b50505050620020cf565b620020118162004278565b600681018054600160801b90046001600160401b03169060106200203583620052bf565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b336001600160a01b03168963ffffffff167faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b4888789604051620021159392919062005166565b60405180910390a3505050505050505050565b606f5460ff16156200214d57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f908152608160205260409020620021738189898989898989620034a6565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620021d462003df9565b505050505050505050565b80516080805463ffffffff191663ffffffff9092169190911790555f5b8151811015620017df578181815181106200221b576200221b620052e5565b602002602001015160815f836001620022359190620052f9565b63ffffffff16815260208101919091526040015f2060050155806200225a816200530f565b915050620021fc565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401620022dd919062004e3f565b602060405180830381865afa158015620022f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231f91906200532a565b6084549091505f9062002345906001600160401b03600160401b8204811691166200529c565b6001600160401b03169050805f0362002360575f9250505090565b6200236c818362005356565b9250505090565b606f545f9060ff16156200239a57604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023d1576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023fb57604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242d9084906001600160401b03166200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200246287836200519b565b6006840180546001600160401b038084166001600160401b03199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024f08362004278565b8363ffffffff167f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a25826040516200252891906200486a565b60405180910390a29695505050505050565b5f8051602062005ec483398151915262002554816200349a565b606f5460ff166200258f576085546001600160401b03908116908316106200258f5760405163048a05a960e41b815260040160405180910390fd5b608580546001600160401b0319166001600160401b0384161790556040517fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590620016a29084906200486a565b5f8051602062005ec4833981519152620025f6816200349a565b62015180826001600160401b031611156200262457604051631c0cfbfd60e31b815260040160405180910390fd5b60858054600160401b600160801b031916600160401b6001600160401b038516021790556040517f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890620016a29084906200486a565b6080545f9063ffffffff168082036200269457505f919050565b5f816001600160401b03811115620026b057620026b062004b23565b604051908082528060200260200182016040528015620026da578160200160208202803683370190505b5090505f5b828110156200274a5760815f620026f8836001620052f9565b63ffffffff1663ffffffff1681526020019081526020015f20600501548282815181106200272a576200272a620052e5565b60209081029190910101528062002741816200530f565b915050620026df565b505f60205b836001146200298a575f620027666002866200536c565b6200277360028762005356565b6200277f9190620052f9565b90505f816001600160401b038111156200279d576200279d62004b23565b604051908082528060200260200182016040528015620027c7578160200160208202803683370190505b5090505f5b828110156200293e57620027e260018462005382565b81148015620027fd5750620027f96002886200536c565b6001145b156200287d578562002811826002620051c5565b81518110620028245762002824620052e5565b6020026020010151856040516020016200284092919062005398565b604051602081830303815290604052805190602001208282815181106200286b576200286b620052e5565b60200260200101818152505062002929565b856200288b826002620051c5565b815181106200289e576200289e620052e5565b602002602001015186826002620028b69190620051c5565b620028c3906001620052f9565b81518110620028d657620028d6620052e5565b6020026020010151604051602001620028f192919062005398565b604051602081830303815290604052805190602001208282815181106200291c576200291c620052e5565b6020026020010181815250505b8062002935816200530f565b915050620027cc565b5080945081955083846040516020016200295a92919062005398565b60405160208183030381529060405280519060200120935082806200297f90620053a6565b93505050506200274f565b5f835f81518110620029a057620029a0620052e5565b602002602001015190505f5b8281101562002a25578184604051602001620029ca92919062005398565b6040516020818303038152906040528051906020012091508384604051602001620029f792919062005398565b604051602081830303815290604052805190602001209350808062002a1c906200530f565b915050620029ac565b5095945050505050565b5f8051602062005dc483398151915262002a49816200349a565b63ffffffff8416158062002a685750607e5463ffffffff908116908516115b1562002a8757604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002ac7576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b1557604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002b5b57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002b9957604051635aa0d5f160e11b815260040160405180910390fd5b6001808201805491840180546001600160a01b031981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416026001600160e01b0319909216909217179055600782018054600160401b63ffffffff8a1602600160401b600160801b03199091161790555f62002c188462001221565b6007840180546001600160401b0319166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002c6d9216908b908b90600401620053be565b5f604051808303815f87803b15801562002c85575f80fd5b505af115801562002c98573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b5f8051602062005de483398151915262002d0c816200349a565b683635c9adc5dea0000082118062002d275750633b9aca0082105b1562002d4657604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016a2565b62002d878262001773565b62002d92816200349a565b620015fe838362003ede565b5f8051602062005e4483398151915262002db8816200349a565b608780546001600160401b031916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002e33575f80fd5b505af115801562002e46573d5f803e3d5ffd5b5050505062002e5462004341565b50565b5f8051602062005ea483398151915262002e71816200349a565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002eae576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002eeb57604051630d409b9360e41b815260040160405180910390fd5b5f62002efc88888888875f620031c6565b5f8080526002909101602052604090209390935550505050505050565b5f8051602062005e2483398151915262002f33816200349a565b607e80545f9190829062002f4d9063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030e996959493929190620053fd565b60405180910390a25050505050505050565b5f54610100900460ff16620017715760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000b72565b620017df828262003e73565b5f6200317f8362001773565b5f84815260346020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620031e19063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620033d49594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034199291811691166200519b565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200347d575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002e54813362004399565b60078801545f906001600160401b039081169087161015620034db5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200357b5760068901546001600160401b03600160801b90910481169089161115620035255760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200357457604051632bd2e3e760e01b815260040160405180910390fd5b50620035ef565b506001600160401b0385165f90815260028901602052604090205480620035b5576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620035ef57604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036285750876001600160401b0316876001600160401b031611155b806200364c575060068901546001600160401b03600160c01b909104811690881611155b156200366b5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b9004811690861614620036b1576040516332a2a77f60e01b815260040160405180910390fd5b5f620036c28a888888868962003f47565b90505f5f8051602062005e64833981519152600283604051620036e6919062005449565b602060405180830381855afa15801562003702573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200372791906200532a565b6200373391906200536c565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a91620037779188919060040162005466565b602060405180830381865afa15801562003793573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037b99190620054a2565b620037d7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038155760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f806200382f8a6200342b565b60078b01549091506001600160401b039081169089161015620038655760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039075760068a01546001600160401b03600160801b9091048116908a161115620038af5760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b90920416146200390057604051632bd2e3e760e01b815260040160405180910390fd5b5062003976565b6001600160401b0388165f90815260028b01602052604090205491508162003942576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200397657604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b031611620039a95760405163b9b18f5760e01b815260040160405180910390fd5b5f620039ba8b8a8a8a878b62003f47565b90505f5f8051602062005e64833981519152600283604051620039de919062005449565b602060405180830381855afa158015620039fa573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003a1f91906200532a565b62003a2b91906200536c565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003a6f9189919060040162005466565b602060405180830381865afa15801562003a8b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003ab19190620054a2565b62003acf576040516309bde33960e01b815260040160405180910390fd5b5f62003adc848b6200529c565b905062003b3587826001600160401b031662003af76200228d565b62003b039190620051c5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190620043c3565b80608460088282829054906101000a90046001600160401b031662003b5b91906200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560848054600160801b600160c01b031916600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003be8575f80fd5b505af115801562003bfb573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003c4d575060068201546001600160401b03600160801b9091048116908216115b1562003c6c5760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f81815260048501602090815260408083208054600689018054600160401b600160801b031916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003d276200267a565b6040518263ffffffff1660e01b815260040162003d4691815260200190565b5f604051808303815f87803b15801562003d5e575f80fd5b505af115801562003d71573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003e52575f80fd5b505af115801562003e65573d5f803e3d5ffd5b505050506200177162004417565b62003e7f828262002263565b620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b62003eea828262002263565b15620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f818152600389016020526040808220549388168252902054606092911580159062003f7c575081155b1562003f9b5760405163340c614f60e11b815260040160405180910390fd5b8062003fba576040516366385b5160e01b815260040160405180910390fd5b62003fc58462004473565b62003fe3576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516001600160601b03193360601b16602082015260348101889052605481018590526001600160c01b031960c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f6200408d836200342b565b9050815f806200409e84846200529c565b6085546001600160401b0391821692505f91620040c491600160401b9004164262005382565b90505b846001600160401b0316846001600160401b0316146200414d576001600160401b038085165f9081526003890160205260409020600181015490911682101562004128576001810154600160401b90046001600160401b0316945062004146565b6200413486866200529c565b6001600160401b03169350506200414d565b50620040c7565b5f6200415a848462005382565b905083811015620041b857808403600c81116200417857806200417b565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620041ad57620041ad62005342565b04608655506200422f565b838103600c8111620041cb5780620041ce565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004207576200420762005342565b04905080608654670de0b6b3a7640000028162004228576200422862005342565b0460865550505b683635c9adc5dea0000060865411156200425657683635c9adc5dea000006086556200426e565b633b9aca0060865410156200426e57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002e545760068101545f90620042c290600160c01b90046001600160401b031660016200519b565b9050620042d08282620033e7565b15620017df5760068201545f90600290620042fd908490600160801b90046001600160401b03166200529c565b620043099190620054c3565b6200431590836200519b565b9050620043238382620033e7565b156200433557620015fe838262003c0e565b620015fe838362003c0e565b606f5460ff166200436557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b620043a5828262002263565b620017df57604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052620015fe908490620044f7565b606f5460ff16156200443c57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b038316108015620044a9575067ffffffff00000001604083901c6001600160401b0316105b8015620044ca575067ffffffff00000001608083901c6001600160401b0316105b8015620044e2575067ffffffff0000000160c083901c105b15620044f057506001919050565b505f919050565b5f6200454d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620045cf9092919063ffffffff16565b805190915015620015fe57808060200190518101906200456e9190620054a2565b620015fe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000b72565b6060620045df84845f85620045e7565b949350505050565b6060824710156200464a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000b72565b5f80866001600160a01b0316858760405162004667919062005449565b5f6040518083038185875af1925050503d805f8114620046a3576040519150601f19603f3d011682016040523d82523d5f602084013e620046a8565b606091505b509150915062001e028783838760608315620047285782515f0362004720576001600160a01b0385163b620047205760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000b72565b5081620045df565b620045df83838151156200473f5781518083602001fd5b8060405162461bcd60e51b815260040162000b72919062004d55565b6108b880620054ec83390190565b6001600160a01b038116811462002e54575f80fd5b80356001600160401b038116811462003495575f80fd5b5f805f805f805f805f806101408b8d031215620047b0575f80fd5b8a35620047bd8162004769565b9950620047cd60208c016200477e565b9850620047dd60408c016200477e565b975060608b0135620047ef8162004769565b965060808b0135620048018162004769565b955060a08b0135620048138162004769565b945060c08b0135620048258162004769565b935060e08b0135620048378162004769565b9250620048486101008c016200477e565b9150620048596101208c016200477e565b90509295989b9194979a5092959850565b6001600160401b0391909116815260200190565b803563ffffffff8116811462003495575f80fd5b5f8060408385031215620048a4575f80fd5b620048af836200487e565b9150620048bf602084016200477e565b90509250929050565b5f805f805f8060c08789031215620048de575f80fd5b8635620048eb8162004769565b9550620048fb602088016200477e565b94506200490b604088016200477e565b935060608701356200491d8162004769565b925060808701356200492f8162004769565b915060a0870135620049418162004769565b809150509295509295509295565b5f6020828403121562004960575f80fd5b62000f81826200487e565b80610300810183101562000f84575f80fd5b5f805f805f805f806103e0898b03121562004996575f80fd5b620049a1896200487e565b9750620049b160208a016200477e565b9650620049c160408a016200477e565b9550620049d160608a016200477e565b9450620049e160808a016200477e565b935060a0890135925060c0890135915062004a008a60e08b016200496b565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004a28575f80fd5b62004a33896200487e565b975062004a4360208a016200477e565b965062004a5360408a016200477e565b955062004a6360608a016200477e565b94506080890135935060a0890135925060c089013562004a838162004769565b915062004a008a60e08b016200496b565b5f6020828403121562004aa5575f80fd5b813561ffff8116811462004ab7575f80fd5b9392505050565b5f6020828403121562004acf575f80fd5b5035919050565b5f806040838503121562004ae8575f80fd5b82359150602083013562004afc8162004769565b809150509250929050565b5f6020828403121562004b18575f80fd5b62000f81826200477e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171562004b625762004b6262004b23565b604052919050565b5f82601f83011262004b7a575f80fd5b81356001600160401b0381111562004b965762004b9662004b23565b62004bab601f8201601f191660200162004b37565b81815284602083860101111562004bc0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121562004bf3575f80fd5b62004bfe886200487e565b965062004c0e602089016200477e565b9550604088013562004c208162004769565b9450606088013562004c328162004769565b9350608088013562004c448162004769565b925060a08801356001600160401b038082111562004c60575f80fd5b62004c6e8b838c0162004b6a565b935060c08a013591508082111562004c84575f80fd5b5062004c938a828b0162004b6a565b91505092959891949750929550565b5f805f805f8060c0878903121562004cb8575f80fd5b62004cc3876200487e565b955062004cd3602088016200477e565b945062004ce3604088016200477e565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004d2057818101518382015260200162004d06565b50505f910152565b5f815180845262004d4181602086016020860162004d04565b601f01601f19169290920160200192915050565b602081525f62000f81602083018462004d28565b5f602080838503121562004d7b575f80fd5b82356001600160401b038082111562004d92575f80fd5b818501915085601f83011262004da6575f80fd5b81358181111562004dbb5762004dbb62004b23565b8060051b915062004dce84830162004b37565b818152918301840191848101908884111562004de8575f80fd5b938501935b8385101562004e085784358252938501939085019062004ded565b98975050505050505050565b5f806040838503121562004e26575f80fd5b62004e31836200477e565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f805f806060858703121562004e67575f80fd5b843562004e748162004769565b935062004e84602086016200487e565b925060408501356001600160401b038082111562004ea0575f80fd5b818701915087601f83011262004eb4575f80fd5b81358181111562004ec3575f80fd5b88602082850101111562004ed5575f80fd5b95989497505060200194505050565b5f6020828403121562004ef5575f80fd5b813562004ab78162004769565b803560ff8116811462003495575f80fd5b5f805f805f8060c0878903121562004f29575f80fd5b863562004f368162004769565b9550602087013562004f488162004769565b945062004f58604088016200477e565b935062004f68606088016200477e565b92506080870135915062004f7f60a0880162004f02565b90509295509295509295565b5f805f805f8060c0878903121562004fa1575f80fd5b863562004fae8162004769565b9550602087013562004fc08162004769565b945062004fd0604088016200477e565b935062004fe06060880162004f02565b92506080870135915060a08701356001600160401b0381111562005002575f80fd5b6200501089828a0162004b6a565b9150509295509295509295565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b80545f90600181811c90808316806200508557607f831692505b60208084108203620050a557634e487b7160e01b5f52602260045260245ffd5b83885260208801828015620050c35760018114620050da5762005105565b60ff198716825285151560051b8201975062005105565b5f898152602090205f5b87811015620050ff57815484820152908601908401620050e4565b83019850505b5050505050505092915050565b6001600160a01b0386811682528516602082015260a0604082018190525f906200513f908301866200506b565b82810360608401526200515381866200506b565b9150508260808301529695505050505050565b6001600160401b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115620051be57620051be62005187565b5092915050565b808202811582820484141762000f845762000f8462005187565b5f63ffffffff808316818103620051fa57620051fa62005187565b6001019392505050565b6001600160a01b038481168252831660208201526060604082018190525f90620052319083018462004d28565b95945050505050565b6001600160a01b038781168252868116602083015263ffffffff861660408301528416606082015260c0608082018190525f906200527b9083018562004d28565b82810360a08401526200528f818562004d28565b9998505050505050505050565b6001600160401b03828116828216039080821115620051be57620051be62005187565b5f6001600160401b038281166002600160401b03198101620051fa57620051fa62005187565b634e487b7160e01b5f52603260045260245ffd5b8082018082111562000f845762000f8462005187565b5f6001820162005323576200532362005187565b5060010190565b5f602082840312156200533b575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f8262005367576200536762005342565b500490565b5f826200537d576200537d62005342565b500690565b8181038181111562000f845762000f8462005187565b918252602082015260400190565b5f81620053b757620053b762005187565b505f190190565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b6001600160a01b038781168252861660208201526001600160401b038516604082015260ff841660608201526080810183905260c060a082018190525f9062004e089083018462004d28565b5f82516200545c81846020870162004d04565b9190910192915050565b6103208101610300808584378201835f5b60018110156200549857815183526020928301929091019060010162005477565b5050509392505050565b5f60208284031215620054b3575f80fd5b8151801515811462004ab7575f80fd5b5f6001600160401b0383811680620054df57620054df62005342565b9216919091049291505056fe60a06040526040516108b83803806108b883398101604081905261002291610349565b828161002e8282610056565b50506001600160a01b03821660805261004e61004960805190565b6100b4565b50505061042e565b61005f82610121565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100a8576100a3828261019f565b505050565b6100b0610212565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100f35f80516020610898833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161011e81610233565b50565b806001600160a01b03163b5f0361015b57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b0316846040516101bb9190610413565b5f60405180830381855af49150503d805f81146101f3576040519150601f19603f3d011682016040523d82523d5f602084013e6101f8565b606091505b509092509050610209858383610270565b95945050505050565b34156102315760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661025c57604051633173bdd160e11b81525f6004820152602401610152565b805f8051602061089883398151915261017e565b60608261028557610280826102cf565b6102c8565b815115801561029c57506001600160a01b0384163b155b156102c557604051639996b31560e01b81526001600160a01b0385166004820152602401610152565b50805b9392505050565b8051156102df5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461030e575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015610341578181015183820152602001610329565b50505f910152565b5f805f6060848603121561035b575f80fd5b610364846102f8565b9250610372602085016102f8565b60408501519092506001600160401b038082111561038e575f80fd5b818601915086601f8301126103a1575f80fd5b8151818111156103b3576103b3610313565b604051601f8201601f19908116603f011681019083821181831017156103db576103db610313565b816040528281528960208487010111156103f3575f80fd5b610404836020830160208801610327565b80955050505050509250925092565b5f8251610424818460208701610327565b9190910192915050565b6080516104536104455f395f601001526104535ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610069575f356001600160e01b03191663278f794360e11b146100615761005f61006d565b565b61005f61007d565b61005f5b61005f6100786100ab565b6100cf565b5f8061008c36600481846102ba565b81019061009991906102f5565b915091506100a782826100ed565b5050565b5f6100ca5f805160206103fe833981519152546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156100e9573d5ff35b3d5ffd5b6100f682610147565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561013f5761013a82826101aa565b505050565b6100a761021c565b806001600160a01b03163b5f0361017c5780604051634c9c8ce360e01b815260040161017391906103bd565b60405180910390fd5b5f805160206103fe83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516101c691906103d1565b5f60405180830381855af49150503d805f81146101fe576040519150601f19603f3d011682016040523d82523d5f602084013e610203565b606091505b509150915061021385838361023b565b95945050505050565b341561005f5760405163b398979f60e01b815260040160405180910390fd5b6060826102505761024b82610291565b61028a565b815115801561026757506001600160a01b0384163b155b156102875783604051639996b31560e01b815260040161017391906103bd565b50805b9392505050565b8051156102a15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f80858511156102c8575f80fd5b838611156102d4575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610306575f80fd5b82356001600160a01b038116811461031c575f80fd5b915060208301356001600160401b0380821115610337575f80fd5b818501915085601f83011261034a575f80fd5b81358181111561035c5761035c6102e1565b604051601f8201601f19908116603f01168101908382118183101715610384576103846102e1565b8160405282815288602084870101111561039c575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b5f82515f5b818110156103f057602081860181015185830152016103d6565b505f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220d3b91b386436af95579d7d767b3c6e83ae79b09bd8dd9344bddb95185404c56564736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610373cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f066156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fbab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bdac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024983dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68ea5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db19b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff285951141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545ea0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4a2646970667358221220d252de4a6f3c7e85fc1b591e20f22391ceda3169df698c1a2ae8dd6cdb2d9da864736f6c63430008140033", + "bytecode": "0x60e060405234801562000010575f80fd5b50604051620061893803806200618983398101604081905262000033916200013c565b6001600160a01b0380841660805280831660c052811660a0528282826200005962000065565b5050505050506200018d565b5f54610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116101562000122575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000139575f80fd5b50565b5f805f606084860312156200014f575f80fd5b83516200015c8162000124565b60208501519093506200016f8162000124565b6040850151909250620001828162000124565b809150509250925092565b60805160a05160c051615f99620001f05f395f81816109d2015281816122910152613b0d01525f818161079a01528181612de50152613dfb01525f818161092c015281816112e90152818161149101528181611f7b0152613cf00152615f995ff3fe608060405234801562000010575f80fd5b5060043610620002b4575f3560e01c80630645af0914620002b8578063066ec01214620002d1578063080b311114620002fd5780630a0d9fbe14620003255780630e36f582146200034057806311f6b287146200035757806312b86e19146200036e5780631489ed10146200038557806315064c96146200039c5780631608859c14620003aa5780631796a1ae14620003c15780631816b7e514620003e85780632072f6c514620003ff578063248a9ca3146200040957806325280169146200042f5780632f2ff15d14620004e357806330c27dde14620004fa57806336568abe146200050e578063394218e91462000525578063477fa270146200053c57806355a71ee0146200054557806360469169146200058857806365c0504d14620005925780637222020f1462000640578063727885e914620006575780637975fcfe146200066e5780637fb6e76a1462000694578063841b24d714620006bc57806387c20c0114620006d75780638bd4f07114620006ee5780638f698ec5146200070557806391d14854146200071c57806399f5634e14620007335780639a908e73146200073d5780639c9f3dfe1462000754578063a066215c146200076b578063a217fddf1462000782578063a2967d99146200078a578063a3c573eb1462000794578063afd23cbe14620007cb578063b99d0ad714620007f5578063c1acbc3414620008cc578063c4c928c214620008e7578063ceee281d14620008fe578063d02103ca1462000926578063d5073f6f146200094e578063d547741f1462000965578063d939b315146200097c578063dbc169761462000990578063dde0ff77146200099a578063e0bfd3d214620009b5578063e46761c414620009cc578063f34eb8eb14620009f4578063f4e926751462000a0b578063f9c4c2ae1462000a1c575b5f80fd5b620002cf620002c936600462004795565b62000b32565b005b608454620002e5906001600160401b031681565b604051620002f491906200486a565b60405180910390f35b620003146200030e36600462004892565b62000f61565b6040519015158152602001620002f4565b608554620002e590600160401b90046001600160401b031681565b620002cf62000351366004620048c8565b62000f8a565b620002e5620003683660046200494f565b62001221565b620002cf6200037f3660046200497d565b62001240565b620002cf6200039636600462004a0f565b620013e8565b606f54620003149060ff1681565b620002cf620003bb36600462004892565b62001570565b607e54620003d29063ffffffff1681565b60405163ffffffff9091168152602001620002f4565b620002cf620003f936600462004a94565b62001603565b620002cf620016ae565b620004206200041a36600462004abe565b62001773565b604051908152602001620002f4565b620004af6200044036600462004892565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620002f4565b620002cf620004f436600462004ad6565b62001787565b608754620002e5906001600160401b031681565b620002cf6200051f36600462004ad6565b620017a9565b620002cf6200053636600462004b07565b620017e3565b60865462000420565b620004206200055636600462004892565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b6200042062001891565b620005f6620005a33660046200494f565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620002f4565b620002cf620006513660046200494f565b620018a8565b620002cf6200066836600462004bdc565b62001990565b620006856200067f36600462004ca2565b62001ddb565b604051620002f4919062004d55565b620003d2620006a536600462004b07565b60836020525f908152604090205463ffffffff1681565b608454620002e590600160c01b90046001600160401b031681565b620002cf620006e836600462004a0f565b62001e0d565b620002cf620006ff3660046200497d565b62002128565b620002cf6200071636600462004d69565b620021df565b620003146200072d36600462004ad6565b62002263565b620004206200228d565b620002e56200074e36600462004e14565b62002373565b620002cf6200076536600462004b07565b6200253a565b620002cf6200077c36600462004b07565b620025dc565b620004205f81565b620004206200267a565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b604051620002f4919062004e3f565b608554620007e190600160801b900461ffff1681565b60405161ffff9091168152602001620002f4565b6200088a6200080636600462004892565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620002f4919081516001600160401b03908116825260208084015190911690820152604082810151908201526060918201519181019190915260800190565b608454620002e590600160801b90046001600160401b031681565b620002cf620008f836600462004e53565b62002a2f565b620003d26200090f36600462004ee4565b60826020525f908152604090205463ffffffff1681565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf6200095f36600462004abe565b62002cf2565b620002cf6200097636600462004ad6565b62002d7c565b608554620002e5906001600160401b031681565b620002cf62002d9e565b608454620002e590600160401b90046001600160401b031681565b620002cf620009c636600462004f13565b62002e57565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf62000a0536600462004f8b565b62002f19565b608054620003d29063ffffffff1681565b62000ab262000a2d3660046200494f565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620002f4565b5f54600290610100900460ff1615801562000b5357505f5460ff8083169116105b62000b7b5760405162461bcd60e51b815260040162000b72906200501d565b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b17905562000bfb620030fb565b62000c155f8051602062005f448339815191528c62003167565b62000c215f8862003167565b62000c3b5f8051602062005e248339815191528862003167565b62000c555f8051602062005ea48339815191528862003167565b62000c6f5f8051602062005dc48339815191528862003167565b62000c895f8051602062005e048339815191528962003167565b62000ca35f8051602062005f248339815191528962003167565b62000cbd5f8051602062005e448339815191528962003167565b62000cd75f8051602062005ec48339815191528962003167565b62000cff5f8051602062005f448339815191525f8051602062005da483398151915262003173565b62000d195f8051602062005da48339815191528962003167565b62000d335f8051602062005de48339815191528962003167565b62000d5b5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b62000d755f8051602062005f048339815191528762003167565b62000d8f5f8051602062005ee48339815191528762003167565b6073546074546001600160401b03600160401b9092048216911680821462000dca57604051632e4cc54360e11b815260040160405180910390fd5b5f62000def888888885f60745f9054906101000a90046001600160401b0316620031c6565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a166001600160401b03198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a59462000eec9493831693600160581b9004909216916076916077919060040162005112565b5f604051808303815f87803b15801562000f04575f80fd5b505af115801562000f17573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681525f8051602062005e848339815191529350602001915062000f4c9050565b60405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062000f819083620033e7565b90505b92915050565b5f54600290610100900460ff1615801562000fab57505f5460ff8083169116105b62000fca5760405162461bcd60e51b815260040162000b72906200501d565b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038a8116919091029190911790915567016345785d8a000060865588166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b1790556200104a620030fb565b620010645f8051602062005f448339815191528862003167565b620010705f8462003167565b6200108a5f8051602062005e248339815191528462003167565b620010a45f8051602062005ea48339815191528462003167565b620010be5f8051602062005dc48339815191528462003167565b620010d85f8051602062005e048339815191528562003167565b620010f25f8051602062005f248339815191528562003167565b6200110c5f8051602062005e448339815191528562003167565b620011265f8051602062005ec48339815191528562003167565b6200114e5f8051602062005f448339815191525f8051602062005da483398151915262003173565b620011685f8051602062005da48339815191528562003167565b620011825f8051602062005de48339815191528562003167565b620011aa5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b620011c45f8051602062005f048339815191528362003167565b620011de5f8051602062005ee48339815191528362003167565b620011ea5f3362003167565b5f805461ff001916905560405160ff821681525f8051602062005e848339815191529060200160405180910390a150505050505050565b63ffffffff81165f90815260816020526040812062000f84906200342b565b5f8051602062005f448339815191526200125a816200349a565b63ffffffff89165f90815260816020526040902062001280818a8a8a8a8a8a8a620034a6565b600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012e7576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620013206200267a565b6040518263ffffffff1660e01b81526004016200133f91815260200190565b5f604051808303815f87803b15801562001357575f80fd5b505af11580156200136a573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b5f8051602062005f4483398151915262001402816200349a565b63ffffffff89165f90815260816020526040902062001428818a8a8a8a8a8a8a62003822565b600681018054600160401b600160801b031916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b900416156200148f576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014c86200267a565b6040518263ffffffff1660e01b8152600401620014e791815260200190565b5f604051808303815f87803b158015620014ff575f80fd5b505af115801562001512573d5f803e3d5ffd5b50505050336001600160a01b03168a63ffffffff167fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d389888a6040516200155c9392919062005166565b60405180910390a350505050505050505050565b63ffffffff82165f9081526081602052604090206200159e5f8051602062005f448339815191523362002263565b620015f257606f5460ff1615620015c857604051630bc011ff60e21b815260040160405180910390fd5b620015d48183620033e7565b620015f257604051630674f25160e11b815260040160405180910390fd5b620015fe818362003c0e565b505050565b5f8051602062005ec48339815191526200161d816200349a565b6103e88261ffff1610806200163757506103ff8261ffff16115b156200165657604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b620016c85f8051602062005f048339815191523362002263565b6200176757608454600160801b90046001600160401b0316158062001718575060845442906200170d9062093a8090600160801b90046001600160401b03166200519b565b6001600160401b0316115b8062001748575060875442906200173d9062093a80906001600160401b03166200519b565b6001600160401b0316115b15620017675760405163692baaad60e11b815260040160405180910390fd5b6200177162003df9565b565b5f9081526034602052604090206001015490565b620017928262001773565b6200179d816200349a565b620015fe838362003e73565b6001600160a01b0381163314620017d357604051630b4ad1cd60e31b815260040160405180910390fd5b620017df828262003ede565b5050565b5f8051602062005ec4833981519152620017fd816200349a565b606f5460ff166200183f576084546001600160401b03600160c01b9091048116908316106200183f5760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516021790556040517f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190620016a29084906200486a565b5f6086546064620018a39190620051c5565b905090565b5f8051602062005e04833981519152620018c2816200349a565b63ffffffff82161580620018e15750607e5463ffffffff908116908316115b156200190057604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff16151590036200194657604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b5f8051602062005f24833981519152620019aa816200349a565b63ffffffff88161580620019c95750607e5463ffffffff908116908916115b15620019e857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001a2e57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001a6b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001a859063ffffffff16620051df565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001ad2906200475b565b62001ae09392919062005204565b604051809103905ff08015801562001afa573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001d5e949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001d9e908d908d9088908e908e908e906004016200523a565b5f604051808303815f87803b15801562001db6575f80fd5b505af115801562001dc9573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001e0290878787878762003f47565b979650505050505050565b606f5460ff161562001e3257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001e8092600160c01b9004811691166200519b565b6001600160401b0316111562001ea957604051638a0704d360e01b815260040160405180910390fd5b6103e862001eb888886200529c565b6001600160401b0316111562001ee157604051635acfba9d60e11b815260040160405180910390fd5b62001ef3818989898989898962003822565b62001eff818762004081565b6085546001600160401b03165f036200200657600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562001f79576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001fb26200267a565b6040518263ffffffff1660e01b815260040162001fd191815260200190565b5f604051808303815f87803b15801562001fe9575f80fd5b505af115801562001ffc573d5f803e3d5ffd5b50505050620020cf565b620020118162004278565b600681018054600160801b90046001600160401b03169060106200203583620052bf565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b336001600160a01b03168963ffffffff167faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b4888789604051620021159392919062005166565b60405180910390a3505050505050505050565b606f5460ff16156200214d57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f908152608160205260409020620021738189898989898989620034a6565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620021d462003df9565b505050505050505050565b80516080805463ffffffff191663ffffffff9092169190911790555f5b8151811015620017df578181815181106200221b576200221b620052e5565b602002602001015160815f836001620022359190620052f9565b63ffffffff16815260208101919091526040015f2060050155806200225a816200530f565b915050620021fc565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401620022dd919062004e3f565b602060405180830381865afa158015620022f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231f91906200532a565b6084549091505f9062002345906001600160401b03600160401b8204811691166200529c565b6001600160401b03169050805f0362002360575f9250505090565b6200236c818362005356565b9250505090565b606f545f9060ff16156200239a57604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023d1576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023fb57604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242d9084906001600160401b03166200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200246287836200519b565b6006840180546001600160401b038084166001600160401b03199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024f08362004278565b8363ffffffff167f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a25826040516200252891906200486a565b60405180910390a29695505050505050565b5f8051602062005ec483398151915262002554816200349a565b606f5460ff166200258f576085546001600160401b03908116908316106200258f5760405163048a05a960e41b815260040160405180910390fd5b608580546001600160401b0319166001600160401b0384161790556040517fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590620016a29084906200486a565b5f8051602062005ec4833981519152620025f6816200349a565b62015180826001600160401b031611156200262457604051631c0cfbfd60e31b815260040160405180910390fd5b60858054600160401b600160801b031916600160401b6001600160401b038516021790556040517f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890620016a29084906200486a565b6080545f9063ffffffff168082036200269457505f919050565b5f816001600160401b03811115620026b057620026b062004b23565b604051908082528060200260200182016040528015620026da578160200160208202803683370190505b5090505f5b828110156200274a5760815f620026f8836001620052f9565b63ffffffff1663ffffffff1681526020019081526020015f20600501548282815181106200272a576200272a620052e5565b60209081029190910101528062002741816200530f565b915050620026df565b505f60205b836001146200298a575f620027666002866200536c565b6200277360028762005356565b6200277f9190620052f9565b90505f816001600160401b038111156200279d576200279d62004b23565b604051908082528060200260200182016040528015620027c7578160200160208202803683370190505b5090505f5b828110156200293e57620027e260018462005382565b81148015620027fd5750620027f96002886200536c565b6001145b156200287d578562002811826002620051c5565b81518110620028245762002824620052e5565b6020026020010151856040516020016200284092919062005398565b604051602081830303815290604052805190602001208282815181106200286b576200286b620052e5565b60200260200101818152505062002929565b856200288b826002620051c5565b815181106200289e576200289e620052e5565b602002602001015186826002620028b69190620051c5565b620028c3906001620052f9565b81518110620028d657620028d6620052e5565b6020026020010151604051602001620028f192919062005398565b604051602081830303815290604052805190602001208282815181106200291c576200291c620052e5565b6020026020010181815250505b8062002935816200530f565b915050620027cc565b5080945081955083846040516020016200295a92919062005398565b60405160208183030381529060405280519060200120935082806200297f90620053a6565b93505050506200274f565b5f835f81518110620029a057620029a0620052e5565b602002602001015190505f5b8281101562002a25578184604051602001620029ca92919062005398565b6040516020818303038152906040528051906020012091508384604051602001620029f792919062005398565b604051602081830303815290604052805190602001209350808062002a1c906200530f565b915050620029ac565b5095945050505050565b5f8051602062005dc483398151915262002a49816200349a565b63ffffffff8416158062002a685750607e5463ffffffff908116908516115b1562002a8757604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002ac7576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b1557604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002b5b57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002b9957604051635aa0d5f160e11b815260040160405180910390fd5b6001808201805491840180546001600160a01b031981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416026001600160e01b0319909216909217179055600782018054600160401b63ffffffff8a1602600160401b600160801b03199091161790555f62002c188462001221565b6007840180546001600160401b0319166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002c6d9216908b908b90600401620053be565b5f604051808303815f87803b15801562002c85575f80fd5b505af115801562002c98573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b5f8051602062005de483398151915262002d0c816200349a565b683635c9adc5dea0000082118062002d275750633b9aca0082105b1562002d4657604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016a2565b62002d878262001773565b62002d92816200349a565b620015fe838362003ede565b5f8051602062005e4483398151915262002db8816200349a565b608780546001600160401b031916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002e33575f80fd5b505af115801562002e46573d5f803e3d5ffd5b5050505062002e5462004341565b50565b5f8051602062005ea483398151915262002e71816200349a565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002eae576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002eeb57604051630d409b9360e41b815260040160405180910390fd5b5f62002efc88888888875f620031c6565b5f8080526002909101602052604090209390935550505050505050565b5f8051602062005e2483398151915262002f33816200349a565b607e80545f9190829062002f4d9063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030e996959493929190620053fd565b60405180910390a25050505050505050565b5f54610100900460ff16620017715760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000b72565b620017df828262003e73565b5f6200317f8362001773565b5f84815260346020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620031e19063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620033d49594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034199291811691166200519b565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200347d575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002e54813362004399565b60078801545f906001600160401b039081169087161015620034db5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200357b5760068901546001600160401b03600160801b90910481169089161115620035255760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200357457604051632bd2e3e760e01b815260040160405180910390fd5b50620035ef565b506001600160401b0385165f90815260028901602052604090205480620035b5576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620035ef57604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036285750876001600160401b0316876001600160401b031611155b806200364c575060068901546001600160401b03600160c01b909104811690881611155b156200366b5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b9004811690861614620036b1576040516332a2a77f60e01b815260040160405180910390fd5b5f620036c28a888888868962003f47565b90505f5f8051602062005e64833981519152600283604051620036e6919062005449565b602060405180830381855afa15801562003702573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200372791906200532a565b6200373391906200536c565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a91620037779188919060040162005466565b602060405180830381865afa15801562003793573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037b99190620054a2565b620037d7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038155760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f806200382f8a6200342b565b60078b01549091506001600160401b039081169089161015620038655760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039075760068a01546001600160401b03600160801b9091048116908a161115620038af5760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b90920416146200390057604051632bd2e3e760e01b815260040160405180910390fd5b5062003976565b6001600160401b0388165f90815260028b01602052604090205491508162003942576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200397657604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b031611620039a95760405163b9b18f5760e01b815260040160405180910390fd5b5f620039ba8b8a8a8a878b62003f47565b90505f5f8051602062005e64833981519152600283604051620039de919062005449565b602060405180830381855afa158015620039fa573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003a1f91906200532a565b62003a2b91906200536c565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003a6f9189919060040162005466565b602060405180830381865afa15801562003a8b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003ab19190620054a2565b62003acf576040516309bde33960e01b815260040160405180910390fd5b5f62003adc848b6200529c565b905062003b3587826001600160401b031662003af76200228d565b62003b039190620051c5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190620043c3565b80608460088282829054906101000a90046001600160401b031662003b5b91906200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560848054600160801b600160c01b031916600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003be8575f80fd5b505af115801562003bfb573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003c4d575060068201546001600160401b03600160801b9091048116908216115b1562003c6c5760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f81815260048501602090815260408083208054600689018054600160401b600160801b031916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003d276200267a565b6040518263ffffffff1660e01b815260040162003d4691815260200190565b5f604051808303815f87803b15801562003d5e575f80fd5b505af115801562003d71573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003e52575f80fd5b505af115801562003e65573d5f803e3d5ffd5b505050506200177162004417565b62003e7f828262002263565b620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b62003eea828262002263565b15620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f818152600389016020526040808220549388168252902054606092911580159062003f7c575081155b1562003f9b5760405163340c614f60e11b815260040160405180910390fd5b8062003fba576040516366385b5160e01b815260040160405180910390fd5b62003fc58462004473565b62003fe3576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516001600160601b03193360601b16602082015260348101889052605481018590526001600160c01b031960c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f6200408d836200342b565b9050815f806200409e84846200529c565b6085546001600160401b0391821692505f91620040c491600160401b9004164262005382565b90505b846001600160401b0316846001600160401b0316146200414d576001600160401b038085165f9081526003890160205260409020600181015490911682101562004128576001810154600160401b90046001600160401b0316945062004146565b6200413486866200529c565b6001600160401b03169350506200414d565b50620040c7565b5f6200415a848462005382565b905083811015620041b857808403600c81116200417857806200417b565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620041ad57620041ad62005342565b04608655506200422f565b838103600c8111620041cb5780620041ce565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004207576200420762005342565b04905080608654670de0b6b3a7640000028162004228576200422862005342565b0460865550505b683635c9adc5dea0000060865411156200425657683635c9adc5dea000006086556200426e565b633b9aca0060865410156200426e57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002e545760068101545f90620042c290600160c01b90046001600160401b031660016200519b565b9050620042d08282620033e7565b15620017df5760068201545f90600290620042fd908490600160801b90046001600160401b03166200529c565b620043099190620054c3565b6200431590836200519b565b9050620043238382620033e7565b156200433557620015fe838262003c0e565b620015fe838362003c0e565b606f5460ff166200436557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b620043a5828262002263565b620017df57604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052620015fe908490620044f7565b606f5460ff16156200443c57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b038316108015620044a9575067ffffffff00000001604083901c6001600160401b0316105b8015620044ca575067ffffffff00000001608083901c6001600160401b0316105b8015620044e2575067ffffffff0000000160c083901c105b15620044f057506001919050565b505f919050565b5f6200454d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620045cf9092919063ffffffff16565b805190915015620015fe57808060200190518101906200456e9190620054a2565b620015fe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000b72565b6060620045df84845f85620045e7565b949350505050565b6060824710156200464a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000b72565b5f80866001600160a01b0316858760405162004667919062005449565b5f6040518083038185875af1925050503d805f8114620046a3576040519150601f19603f3d011682016040523d82523d5f602084013e620046a8565b606091505b509150915062001e028783838760608315620047285782515f0362004720576001600160a01b0385163b620047205760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000b72565b5081620045df565b620045df83838151156200473f5781518083602001fd5b8060405162461bcd60e51b815260040162000b72919062004d55565b6108b880620054ec83390190565b6001600160a01b038116811462002e54575f80fd5b80356001600160401b038116811462003495575f80fd5b5f805f805f805f805f806101408b8d031215620047b0575f80fd5b8a35620047bd8162004769565b9950620047cd60208c016200477e565b9850620047dd60408c016200477e565b975060608b0135620047ef8162004769565b965060808b0135620048018162004769565b955060a08b0135620048138162004769565b945060c08b0135620048258162004769565b935060e08b0135620048378162004769565b9250620048486101008c016200477e565b9150620048596101208c016200477e565b90509295989b9194979a5092959850565b6001600160401b0391909116815260200190565b803563ffffffff8116811462003495575f80fd5b5f8060408385031215620048a4575f80fd5b620048af836200487e565b9150620048bf602084016200477e565b90509250929050565b5f805f805f8060c08789031215620048de575f80fd5b8635620048eb8162004769565b9550620048fb602088016200477e565b94506200490b604088016200477e565b935060608701356200491d8162004769565b925060808701356200492f8162004769565b915060a0870135620049418162004769565b809150509295509295509295565b5f6020828403121562004960575f80fd5b62000f81826200487e565b80610300810183101562000f84575f80fd5b5f805f805f805f806103e0898b03121562004996575f80fd5b620049a1896200487e565b9750620049b160208a016200477e565b9650620049c160408a016200477e565b9550620049d160608a016200477e565b9450620049e160808a016200477e565b935060a0890135925060c0890135915062004a008a60e08b016200496b565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004a28575f80fd5b62004a33896200487e565b975062004a4360208a016200477e565b965062004a5360408a016200477e565b955062004a6360608a016200477e565b94506080890135935060a0890135925060c089013562004a838162004769565b915062004a008a60e08b016200496b565b5f6020828403121562004aa5575f80fd5b813561ffff8116811462004ab7575f80fd5b9392505050565b5f6020828403121562004acf575f80fd5b5035919050565b5f806040838503121562004ae8575f80fd5b82359150602083013562004afc8162004769565b809150509250929050565b5f6020828403121562004b18575f80fd5b62000f81826200477e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171562004b625762004b6262004b23565b604052919050565b5f82601f83011262004b7a575f80fd5b81356001600160401b0381111562004b965762004b9662004b23565b62004bab601f8201601f191660200162004b37565b81815284602083860101111562004bc0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121562004bf3575f80fd5b62004bfe886200487e565b965062004c0e602089016200477e565b9550604088013562004c208162004769565b9450606088013562004c328162004769565b9350608088013562004c448162004769565b925060a08801356001600160401b038082111562004c60575f80fd5b62004c6e8b838c0162004b6a565b935060c08a013591508082111562004c84575f80fd5b5062004c938a828b0162004b6a565b91505092959891949750929550565b5f805f805f8060c0878903121562004cb8575f80fd5b62004cc3876200487e565b955062004cd3602088016200477e565b945062004ce3604088016200477e565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004d2057818101518382015260200162004d06565b50505f910152565b5f815180845262004d4181602086016020860162004d04565b601f01601f19169290920160200192915050565b602081525f62000f81602083018462004d28565b5f602080838503121562004d7b575f80fd5b82356001600160401b038082111562004d92575f80fd5b818501915085601f83011262004da6575f80fd5b81358181111562004dbb5762004dbb62004b23565b8060051b915062004dce84830162004b37565b818152918301840191848101908884111562004de8575f80fd5b938501935b8385101562004e085784358252938501939085019062004ded565b98975050505050505050565b5f806040838503121562004e26575f80fd5b62004e31836200477e565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f805f806060858703121562004e67575f80fd5b843562004e748162004769565b935062004e84602086016200487e565b925060408501356001600160401b038082111562004ea0575f80fd5b818701915087601f83011262004eb4575f80fd5b81358181111562004ec3575f80fd5b88602082850101111562004ed5575f80fd5b95989497505060200194505050565b5f6020828403121562004ef5575f80fd5b813562004ab78162004769565b803560ff8116811462003495575f80fd5b5f805f805f8060c0878903121562004f29575f80fd5b863562004f368162004769565b9550602087013562004f488162004769565b945062004f58604088016200477e565b935062004f68606088016200477e565b92506080870135915062004f7f60a0880162004f02565b90509295509295509295565b5f805f805f8060c0878903121562004fa1575f80fd5b863562004fae8162004769565b9550602087013562004fc08162004769565b945062004fd0604088016200477e565b935062004fe06060880162004f02565b92506080870135915060a08701356001600160401b0381111562005002575f80fd5b6200501089828a0162004b6a565b9150509295509295509295565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b80545f90600181811c90808316806200508557607f831692505b60208084108203620050a557634e487b7160e01b5f52602260045260245ffd5b83885260208801828015620050c35760018114620050da5762005105565b60ff198716825285151560051b8201975062005105565b5f898152602090205f5b87811015620050ff57815484820152908601908401620050e4565b83019850505b5050505050505092915050565b6001600160a01b0386811682528516602082015260a0604082018190525f906200513f908301866200506b565b82810360608401526200515381866200506b565b9150508260808301529695505050505050565b6001600160401b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115620051be57620051be62005187565b5092915050565b808202811582820484141762000f845762000f8462005187565b5f63ffffffff808316818103620051fa57620051fa62005187565b6001019392505050565b6001600160a01b038481168252831660208201526060604082018190525f90620052319083018462004d28565b95945050505050565b6001600160a01b038781168252868116602083015263ffffffff861660408301528416606082015260c0608082018190525f906200527b9083018562004d28565b82810360a08401526200528f818562004d28565b9998505050505050505050565b6001600160401b03828116828216039080821115620051be57620051be62005187565b5f6001600160401b038281166002600160401b03198101620051fa57620051fa62005187565b634e487b7160e01b5f52603260045260245ffd5b8082018082111562000f845762000f8462005187565b5f6001820162005323576200532362005187565b5060010190565b5f602082840312156200533b575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f8262005367576200536762005342565b500490565b5f826200537d576200537d62005342565b500690565b8181038181111562000f845762000f8462005187565b918252602082015260400190565b5f81620053b757620053b762005187565b505f190190565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b6001600160a01b038781168252861660208201526001600160401b038516604082015260ff841660608201526080810183905260c060a082018190525f9062004e089083018462004d28565b5f82516200545c81846020870162004d04565b9190910192915050565b6103208101610300808584378201835f5b60018110156200549857815183526020928301929091019060010162005477565b5050509392505050565b5f60208284031215620054b3575f80fd5b8151801515811462004ab7575f80fd5b5f6001600160401b0383811680620054df57620054df62005342565b9216919091049291505056fe60a06040526040516108b83803806108b883398101604081905261002291610349565b828161002e8282610056565b50506001600160a01b03821660805261004e61004960805190565b6100b4565b50505061042e565b61005f82610121565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100a8576100a3828261019f565b505050565b6100b0610212565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100f35f80516020610898833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161011e81610233565b50565b806001600160a01b03163b5f0361015b57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b0316846040516101bb9190610413565b5f60405180830381855af49150503d805f81146101f3576040519150601f19603f3d011682016040523d82523d5f602084013e6101f8565b606091505b509092509050610209858383610270565b95945050505050565b34156102315760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661025c57604051633173bdd160e11b81525f6004820152602401610152565b805f8051602061089883398151915261017e565b60608261028557610280826102cf565b6102c8565b815115801561029c57506001600160a01b0384163b155b156102c557604051639996b31560e01b81526001600160a01b0385166004820152602401610152565b50805b9392505050565b8051156102df5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461030e575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015610341578181015183820152602001610329565b50505f910152565b5f805f6060848603121561035b575f80fd5b610364846102f8565b9250610372602085016102f8565b60408501519092506001600160401b038082111561038e575f80fd5b818601915086601f8301126103a1575f80fd5b8151818111156103b3576103b3610313565b604051601f8201601f19908116603f011681019083821181831017156103db576103db610313565b816040528281528960208487010111156103f3575f80fd5b610404836020830160208801610327565b80955050505050509250925092565b5f8251610424818460208701610327565b9190910192915050565b6080516104536104455f395f601001526104535ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610069575f356001600160e01b03191663278f794360e11b146100615761005f61006d565b565b61005f61007d565b61005f5b61005f6100786100ab565b6100cf565b5f8061008c36600481846102ba565b81019061009991906102f5565b915091506100a782826100ed565b5050565b5f6100ca5f805160206103fe833981519152546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156100e9573d5ff35b3d5ffd5b6100f682610147565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561013f5761013a82826101aa565b505050565b6100a761021c565b806001600160a01b03163b5f0361017c5780604051634c9c8ce360e01b815260040161017391906103bd565b60405180910390fd5b5f805160206103fe83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516101c691906103d1565b5f60405180830381855af49150503d805f81146101fe576040519150601f19603f3d011682016040523d82523d5f602084013e610203565b606091505b509150915061021385838361023b565b95945050505050565b341561005f5760405163b398979f60e01b815260040160405180910390fd5b6060826102505761024b82610291565b61028a565b815115801561026757506001600160a01b0384163b155b156102875783604051639996b31560e01b815260040161017391906103bd565b50805b9392505050565b8051156102a15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f80858511156102c8575f80fd5b838611156102d4575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610306575f80fd5b82356001600160a01b038116811461031c575f80fd5b915060208301356001600160401b0380821115610337575f80fd5b818501915085601f83011261034a575f80fd5b81358181111561035c5761035c6102e1565b604051601f8201601f19908116603f01168101908382118183101715610384576103846102e1565b8160405282815288602084870101111561039c575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b5f82515f5b818110156103f057602081860181015185830152016103d6565b505f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220d3b91b386436af95579d7d767b3c6e83ae79b09bd8dd9344bddb95185404c56564736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610373cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f066156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fbab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bdac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024983dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68ea5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db19b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff285951141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545ea0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4a26469706673582212200ce6fcb9a490f6b26945426ab051c2a0bf7369618afe91f355793beb03787e1964736f6c63430008140033", + "deployedBytecode": "0x608060405234801562000010575f80fd5b5060043610620002b4575f3560e01c80630645af0914620002b8578063066ec01214620002d1578063080b311114620002fd5780630a0d9fbe14620003255780630e36f582146200034057806311f6b287146200035757806312b86e19146200036e5780631489ed10146200038557806315064c96146200039c5780631608859c14620003aa5780631796a1ae14620003c15780631816b7e514620003e85780632072f6c514620003ff578063248a9ca3146200040957806325280169146200042f5780632f2ff15d14620004e357806330c27dde14620004fa57806336568abe146200050e578063394218e91462000525578063477fa270146200053c57806355a71ee0146200054557806360469169146200058857806365c0504d14620005925780637222020f1462000640578063727885e914620006575780637975fcfe146200066e5780637fb6e76a1462000694578063841b24d714620006bc57806387c20c0114620006d75780638bd4f07114620006ee5780638f698ec5146200070557806391d14854146200071c57806399f5634e14620007335780639a908e73146200073d5780639c9f3dfe1462000754578063a066215c146200076b578063a217fddf1462000782578063a2967d99146200078a578063a3c573eb1462000794578063afd23cbe14620007cb578063b99d0ad714620007f5578063c1acbc3414620008cc578063c4c928c214620008e7578063ceee281d14620008fe578063d02103ca1462000926578063d5073f6f146200094e578063d547741f1462000965578063d939b315146200097c578063dbc169761462000990578063dde0ff77146200099a578063e0bfd3d214620009b5578063e46761c414620009cc578063f34eb8eb14620009f4578063f4e926751462000a0b578063f9c4c2ae1462000a1c575b5f80fd5b620002cf620002c936600462004795565b62000b32565b005b608454620002e5906001600160401b031681565b604051620002f491906200486a565b60405180910390f35b620003146200030e36600462004892565b62000f61565b6040519015158152602001620002f4565b608554620002e590600160401b90046001600160401b031681565b620002cf62000351366004620048c8565b62000f8a565b620002e5620003683660046200494f565b62001221565b620002cf6200037f3660046200497d565b62001240565b620002cf6200039636600462004a0f565b620013e8565b606f54620003149060ff1681565b620002cf620003bb36600462004892565b62001570565b607e54620003d29063ffffffff1681565b60405163ffffffff9091168152602001620002f4565b620002cf620003f936600462004a94565b62001603565b620002cf620016ae565b620004206200041a36600462004abe565b62001773565b604051908152602001620002f4565b620004af6200044036600462004892565b60408051606080820183525f808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620002f4565b620002cf620004f436600462004ad6565b62001787565b608754620002e5906001600160401b031681565b620002cf6200051f36600462004ad6565b620017a9565b620002cf6200053636600462004b07565b620017e3565b60865462000420565b620004206200055636600462004892565b63ffffffff82165f9081526081602090815260408083206001600160401b038516845260020190915290205492915050565b6200042062001891565b620005f6620005a33660046200494f565b607f6020525f90815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620002f4565b620002cf620006513660046200494f565b620018a8565b620002cf6200066836600462004bdc565b62001990565b620006856200067f36600462004ca2565b62001ddb565b604051620002f4919062004d55565b620003d2620006a536600462004b07565b60836020525f908152604090205463ffffffff1681565b608454620002e590600160c01b90046001600160401b031681565b620002cf620006e836600462004a0f565b62001e0d565b620002cf620006ff3660046200497d565b62002128565b620002cf6200071636600462004d69565b620021df565b620003146200072d36600462004ad6565b62002263565b620004206200228d565b620002e56200074e36600462004e14565b62002373565b620002cf6200076536600462004b07565b6200253a565b620002cf6200077c36600462004b07565b620025dc565b620004205f81565b620004206200267a565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b604051620002f4919062004e3f565b608554620007e190600160801b900461ffff1681565b60405161ffff9091168152602001620002f4565b6200088a6200080636600462004892565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620002f4919081516001600160401b03908116825260208084015190911690820152604082810151908201526060918201519181019190915260800190565b608454620002e590600160801b90046001600160401b031681565b620002cf620008f836600462004e53565b62002a2f565b620003d26200090f36600462004ee4565b60826020525f908152604090205463ffffffff1681565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf6200095f36600462004abe565b62002cf2565b620002cf6200097636600462004ad6565b62002d7c565b608554620002e5906001600160401b031681565b620002cf62002d9e565b608454620002e590600160401b90046001600160401b031681565b620002cf620009c636600462004f13565b62002e57565b620007bc7f000000000000000000000000000000000000000000000000000000000000000081565b620002cf62000a0536600462004f8b565b62002f19565b608054620003d29063ffffffff1681565b62000ab262000a2d3660046200494f565b60816020525f9081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620002f4565b5f54600290610100900460ff1615801562000b5357505f5460ff8083169116105b62000b7b5760405162461bcd60e51b815260040162000b72906200501d565b60405180910390fd5b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b17905562000bfb620030fb565b62000c155f8051602062005f448339815191528c62003167565b62000c215f8862003167565b62000c3b5f8051602062005e248339815191528862003167565b62000c555f8051602062005ea48339815191528862003167565b62000c6f5f8051602062005dc48339815191528862003167565b62000c895f8051602062005e048339815191528962003167565b62000ca35f8051602062005f248339815191528962003167565b62000cbd5f8051602062005e448339815191528962003167565b62000cd75f8051602062005ec48339815191528962003167565b62000cff5f8051602062005f448339815191525f8051602062005da483398151915262003173565b62000d195f8051602062005da48339815191528962003167565b62000d335f8051602062005de48339815191528962003167565b62000d5b5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b62000d755f8051602062005f048339815191528762003167565b62000d8f5f8051602062005ee48339815191528762003167565b6073546074546001600160401b03600160401b9092048216911680821462000dca57604051632e4cc54360e11b815260040160405180910390fd5b5f62000def888888885f60745f9054906101000a90046001600160401b0316620031c6565b6001600160401b038381165f81815260756020908152604080832054600287018352818420558885168084526072808452828520600389018552948390208554815560018087018054919092018054918a166001600160401b03198084168217835593546001600160801b0319938416909117600160401b91829004909b1681029a909a17905560068a01805490911690931797870297909717909155600787018054909616909417909455607a54606f549390915290549251635d6717a560e01b81529394506001600160a01b038c811694635d6717a59462000eec9493831693600160581b9004909216916076916077919060040162005112565b5f604051808303815f87803b15801562000f04575f80fd5b505af115801562000f17573d5f803e3d5ffd5b50505f805461ff0019169055505060405160ff851681525f8051602062005e848339815191529350602001915062000f4c9050565b60405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062000f819083620033e7565b90505b92915050565b5f54600290610100900460ff1615801562000fab57505f5460ff8083169116105b62000fca5760405162461bcd60e51b815260040162000b72906200501d565b5f805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038a8116919091029190911790915567016345785d8a000060865588166001600160801b03199091161760e160431b1761ffff60801b19166101f560811b1790556200104a620030fb565b620010645f8051602062005f448339815191528862003167565b620010705f8462003167565b6200108a5f8051602062005e248339815191528462003167565b620010a45f8051602062005ea48339815191528462003167565b620010be5f8051602062005dc48339815191528462003167565b620010d85f8051602062005e048339815191528562003167565b620010f25f8051602062005f248339815191528562003167565b6200110c5f8051602062005e448339815191528562003167565b620011265f8051602062005ec48339815191528562003167565b6200114e5f8051602062005f448339815191525f8051602062005da483398151915262003173565b620011685f8051602062005da48339815191528562003167565b620011825f8051602062005de48339815191528562003167565b620011aa5f8051602062005f048339815191525f8051602062005ee483398151915262003173565b620011c45f8051602062005f048339815191528362003167565b620011de5f8051602062005ee48339815191528362003167565b620011ea5f3362003167565b5f805461ff001916905560405160ff821681525f8051602062005e848339815191529060200160405180910390a150505050505050565b63ffffffff81165f90815260816020526040812062000f84906200342b565b5f8051602062005f448339815191526200125a816200349a565b63ffffffff89165f90815260816020526040902062001280818a8a8a8a8a8a8a620034a6565b600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b90041615620012e7576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620013206200267a565b6040518263ffffffff1660e01b81526004016200133f91815260200190565b5f604051808303815f87803b15801562001357575f80fd5b505af11580156200136a573d5f803e3d5ffd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b5f8051602062005f4483398151915262001402816200349a565b63ffffffff89165f90815260816020526040902062001428818a8a8a8a8a8a8a62003822565b600681018054600160401b600160801b031916600160401b6001600160401b038a81169182029290921783555f9081526002840160205260409020879055600583018890559054600160801b900416156200148f576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620014c86200267a565b6040518263ffffffff1660e01b8152600401620014e791815260200190565b5f604051808303815f87803b158015620014ff575f80fd5b505af115801562001512573d5f803e3d5ffd5b50505050336001600160a01b03168a63ffffffff167fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d389888a6040516200155c9392919062005166565b60405180910390a350505050505050505050565b63ffffffff82165f9081526081602052604090206200159e5f8051602062005f448339815191523362002263565b620015f257606f5460ff1615620015c857604051630bc011ff60e21b815260040160405180910390fd5b620015d48183620033e7565b620015f257604051630674f25160e11b815260040160405180910390fd5b620015fe818362003c0e565b505050565b5f8051602062005ec48339815191526200161d816200349a565b6103e88261ffff1610806200163757506103ff8261ffff16115b156200165657604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b620016c85f8051602062005f048339815191523362002263565b6200176757608454600160801b90046001600160401b0316158062001718575060845442906200170d9062093a8090600160801b90046001600160401b03166200519b565b6001600160401b0316115b8062001748575060875442906200173d9062093a80906001600160401b03166200519b565b6001600160401b0316115b15620017675760405163692baaad60e11b815260040160405180910390fd5b6200177162003df9565b565b5f9081526034602052604090206001015490565b620017928262001773565b6200179d816200349a565b620015fe838362003e73565b6001600160a01b0381163314620017d357604051630b4ad1cd60e31b815260040160405180910390fd5b620017df828262003ede565b5050565b5f8051602062005ec4833981519152620017fd816200349a565b606f5460ff166200183f576084546001600160401b03600160c01b9091048116908316106200183f5760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516021790556040517f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190620016a29084906200486a565b5f6086546064620018a39190620051c5565b905090565b5f8051602062005e04833981519152620018c2816200349a565b63ffffffff82161580620018e15750607e5463ffffffff908116908316115b156200190057604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82165f908152607f60205260409020600180820154600160e81b900460ff16151590036200194657604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b5f8051602062005f24833981519152620019aa816200349a565b63ffffffff88161580620019c95750607e5463ffffffff908116908916115b15620019e857604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88165f908152607f60205260409020600180820154600160e81b900460ff161515900362001a2e57604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b0388165f9081526083602052604090205463ffffffff161562001a6b576040516337c8fe0960e11b815260040160405180910390fd5b608080545f9190829062001a859063ffffffff16620051df565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f80825260208201928390529394506001600160a01b0390921691309162001ad2906200475b565b62001ae09392919062005204565b604051809103905ff08015801562001afa573d5f803e3d5ffd5b5090508160835f8c6001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f836001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550836001015f9054906101000a90046001600160a01b0316816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a815f0160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002015f806001600160401b031681526020019081526020015f20819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001d5e949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001d9e908d908d9088908e908e908e906004016200523a565b5f604051808303815f87803b15801562001db6575f80fd5b505af115801562001dc9573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f90815260816020526040902060609062001e0290878787878762003f47565b979650505050505050565b606f5460ff161562001e3257604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f9081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001e8092600160c01b9004811691166200519b565b6001600160401b0316111562001ea957604051638a0704d360e01b815260040160405180910390fd5b6103e862001eb888886200529c565b6001600160401b0316111562001ee157604051635acfba9d60e11b815260040160405180910390fd5b62001ef3818989898989898962003822565b62001eff818762004081565b6085546001600160401b03165f036200200657600681018054600160401b600160801b031916600160401b6001600160401b038981169182029290921783555f9081526002840160205260409020869055600583018790559054600160801b9004161562001f79576006810180546001600160801b031690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001fb26200267a565b6040518263ffffffff1660e01b815260040162001fd191815260200190565b5f604051808303815f87803b15801562001fe9575f80fd5b505af115801562001ffc573d5f803e3d5ffd5b50505050620020cf565b620020118162004278565b600681018054600160801b90046001600160401b03169060106200203583620052bf565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b900487165f90815260048a01909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b336001600160a01b03168963ffffffff167faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b4888789604051620021159392919062005166565b60405180910390a3505050505050505050565b606f5460ff16156200214d57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88165f908152608160205260409020620021738189898989898989620034a6565b6001600160401b0387165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620021d462003df9565b505050505050505050565b80516080805463ffffffff191663ffffffff9092169190911790555f5b8151811015620017df578181815181106200221b576200221b620052e5565b602002602001015160815f836001620022359190620052f9565b63ffffffff16815260208101919091526040015f2060050155806200225a816200530f565b915050620021fc565b5f9182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401620022dd919062004e3f565b602060405180830381865afa158015620022f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231f91906200532a565b6084549091505f9062002345906001600160401b03600160401b8204811691166200529c565b6001600160401b03169050805f0362002360575f9250505090565b6200236c818362005356565b9250505090565b606f545f9060ff16156200239a57604051630bc011ff60e21b815260040160405180910390fd5b335f9081526082602052604081205463ffffffff1690819003620023d1576040516371653c1560e01b815260040160405180910390fd5b836001600160401b03165f03620023fb57604051632590ccf960e01b815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200242d9084906001600160401b03166200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560068301541690505f6200246287836200519b565b6006840180546001600160401b038084166001600160401b03199092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b0190915292909320905181559151600192909201805491518416600160401b026001600160801b031990921692909316919091171790559050620024f08362004278565b8363ffffffff167f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a25826040516200252891906200486a565b60405180910390a29695505050505050565b5f8051602062005ec483398151915262002554816200349a565b606f5460ff166200258f576085546001600160401b03908116908316106200258f5760405163048a05a960e41b815260040160405180910390fd5b608580546001600160401b0319166001600160401b0384161790556040517fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590620016a29084906200486a565b5f8051602062005ec4833981519152620025f6816200349a565b62015180826001600160401b031611156200262457604051631c0cfbfd60e31b815260040160405180910390fd5b60858054600160401b600160801b031916600160401b6001600160401b038516021790556040517f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890620016a29084906200486a565b6080545f9063ffffffff168082036200269457505f919050565b5f816001600160401b03811115620026b057620026b062004b23565b604051908082528060200260200182016040528015620026da578160200160208202803683370190505b5090505f5b828110156200274a5760815f620026f8836001620052f9565b63ffffffff1663ffffffff1681526020019081526020015f20600501548282815181106200272a576200272a620052e5565b60209081029190910101528062002741816200530f565b915050620026df565b505f60205b836001146200298a575f620027666002866200536c565b6200277360028762005356565b6200277f9190620052f9565b90505f816001600160401b038111156200279d576200279d62004b23565b604051908082528060200260200182016040528015620027c7578160200160208202803683370190505b5090505f5b828110156200293e57620027e260018462005382565b81148015620027fd5750620027f96002886200536c565b6001145b156200287d578562002811826002620051c5565b81518110620028245762002824620052e5565b6020026020010151856040516020016200284092919062005398565b604051602081830303815290604052805190602001208282815181106200286b576200286b620052e5565b60200260200101818152505062002929565b856200288b826002620051c5565b815181106200289e576200289e620052e5565b602002602001015186826002620028b69190620051c5565b620028c3906001620052f9565b81518110620028d657620028d6620052e5565b6020026020010151604051602001620028f192919062005398565b604051602081830303815290604052805190602001208282815181106200291c576200291c620052e5565b6020026020010181815250505b8062002935816200530f565b915050620027cc565b5080945081955083846040516020016200295a92919062005398565b60405160208183030381529060405280519060200120935082806200297f90620053a6565b93505050506200274f565b5f835f81518110620029a057620029a0620052e5565b602002602001015190505f5b8281101562002a25578184604051602001620029ca92919062005398565b6040516020818303038152906040528051906020012091508384604051602001620029f792919062005398565b604051602081830303815290604052805190602001209350808062002a1c906200530f565b915050620029ac565b5095945050505050565b5f8051602062005dc483398151915262002a49816200349a565b63ffffffff8416158062002a685750607e5463ffffffff908116908516115b1562002a8757604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526082602052604081205463ffffffff169081900362002ac7576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181165f908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002b1557604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86165f908152607f60205260409020600180820154600160e81b900460ff161515900362002b5b57604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002b9957604051635aa0d5f160e11b815260040160405180910390fd5b6001808201805491840180546001600160a01b031981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416026001600160e01b0319909216909217179055600782018054600160401b63ffffffff8a1602600160401b600160801b03199091161790555f62002c188462001221565b6007840180546001600160401b0319166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002c6d9216908b908b90600401620053be565b5f604051808303815f87803b15801562002c85575f80fd5b505af115801562002c98573d5f803e3d5ffd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b5f8051602062005de483398151915262002d0c816200349a565b683635c9adc5dea0000082118062002d275750633b9aca0082105b1562002d4657604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b290602001620016a2565b62002d878262001773565b62002d92816200349a565b620015fe838362003ede565b5f8051602062005e4483398151915262002db8816200349a565b608780546001600160401b031916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc16976916004808301925f92919082900301818387803b15801562002e33575f80fd5b505af115801562002e46573d5f803e3d5ffd5b5050505062002e5462004341565b50565b5f8051602062005ea483398151915262002e71816200349a565b6001600160401b0384165f9081526083602052604090205463ffffffff161562002eae576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b0387165f9081526082602052604090205463ffffffff161562002eeb57604051630d409b9360e41b815260040160405180910390fd5b5f62002efc88888888875f620031c6565b5f8080526002909101602052604090209390935550505050505050565b5f8051602062005e2483398151915262002f33816200349a565b607e80545f9190829062002f4d9063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030e996959493929190620053fd565b60405180910390a25050505050505050565b5f54610100900460ff16620017715760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000b72565b620017df828262003e73565b5f6200317f8362001773565b5f84815260346020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b608080545f9182918290620031e19063ffffffff16620051df565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f876001600160401b03166001600160401b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b0316021790555086826001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084825f0160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620033d49594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b6085546001600160401b038281165f90815260048501602052604081205490924292620034199291811691166200519b565b6001600160401b031611159392505050565b60068101545f90600160801b90046001600160401b0316156200347d575060068101546001600160401b03600160801b90910481165f9081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002e54813362004399565b60078801545f906001600160401b039081169087161015620034db5760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b038816156200357b5760068901546001600160401b03600160801b90910481169089161115620035255760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b038088165f90815260048a0160205260409020600281015481549092888116600160401b90920416146200357457604051632bd2e3e760e01b815260040160405180910390fd5b50620035ef565b506001600160401b0385165f90815260028901602052604090205480620035b5576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620035ef57604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620036285750876001600160401b0316876001600160401b031611155b806200364c575060068901546001600160401b03600160c01b909104811690881611155b156200366b5760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b038781165f90815260048b016020526040902054600160401b9004811690861614620036b1576040516332a2a77f60e01b815260040160405180910390fd5b5f620036c28a888888868962003f47565b90505f5f8051602062005e64833981519152600283604051620036e6919062005449565b602060405180830381855afa15801562003702573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200372791906200532a565b6200373391906200536c565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a91620037779188919060040162005466565b602060405180830381865afa15801562003793573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037b99190620054a2565b620037d7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b0389165f90815260048c016020526040902060020154859003620038155760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b5f806200382f8a6200342b565b60078b01549091506001600160401b039081169089161015620038655760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620039075760068a01546001600160401b03600160801b9091048116908a161115620038af5760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a165f90815260048c01602052604090206002810154815490945090918a8116600160401b90920416146200390057604051632bd2e3e760e01b815260040160405180910390fd5b5062003976565b6001600160401b0388165f90815260028b01602052604090205491508162003942576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200397657604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b031611620039a95760405163b9b18f5760e01b815260040160405180910390fd5b5f620039ba8b8a8a8a878b62003f47565b90505f5f8051602062005e64833981519152600283604051620039de919062005449565b602060405180830381855afa158015620039fa573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003a1f91906200532a565b62003a2b91906200536c565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a9162003a6f9189919060040162005466565b602060405180830381865afa15801562003a8b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003ab19190620054a2565b62003acf576040516309bde33960e01b815260040160405180910390fd5b5f62003adc848b6200529c565b905062003b3587826001600160401b031662003af76200228d565b62003b039190620051c5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190620043c3565b80608460088282829054906101000a90046001600160401b031662003b5b91906200519b565b82546101009290920a6001600160401b0381810219909316918316021790915560848054600160801b600160c01b031916600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d153906064015f604051808303815f87803b15801562003be8575f80fd5b505af115801562003bfb573d5f803e3d5ffd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003c4d575060068201546001600160401b03600160801b9091048116908216115b1562003c6c5760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b038181165f81815260048501602090815260408083208054600689018054600160401b600160801b031916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003d276200267a565b6040518263ffffffff1660e01b815260040162003d4691815260200190565b5f604051808303815f87803b15801562003d5e575f80fd5b505af115801562003d71573d5f803e3d5ffd5b505085546001600160a01b03165f90815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562003e52575f80fd5b505af115801562003e65573d5f803e3d5ffd5b505050506200177162004417565b62003e7f828262002263565b620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b62003eea828262002263565b15620017df575f8281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086165f818152600389016020526040808220549388168252902054606092911580159062003f7c575081155b1562003f9b5760405163340c614f60e11b815260040160405180910390fd5b8062003fba576040516366385b5160e01b815260040160405180910390fd5b62003fc58462004473565b62003fe3576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516001600160601b03193360601b16602082015260348101889052605481018590526001600160c01b031960c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f6200408d836200342b565b9050815f806200409e84846200529c565b6085546001600160401b0391821692505f91620040c491600160401b9004164262005382565b90505b846001600160401b0316846001600160401b0316146200414d576001600160401b038085165f9081526003890160205260409020600181015490911682101562004128576001810154600160401b90046001600160401b0316945062004146565b6200413486866200529c565b6001600160401b03169350506200414d565b50620040c7565b5f6200415a848462005382565b905083811015620041b857808403600c81116200417857806200417b565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a6086540281620041ad57620041ad62005342565b04608655506200422f565b838103600c8111620041cb5780620041ce565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004207576200420762005342565b04905080608654670de0b6b3a7640000028162004228576200422862005342565b0460865550505b683635c9adc5dea0000060865411156200425657683635c9adc5dea000006086556200426e565b633b9aca0060865410156200426e57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002e545760068101545f90620042c290600160c01b90046001600160401b031660016200519b565b9050620042d08282620033e7565b15620017df5760068201545f90600290620042fd908490600160801b90046001600160401b03166200529c565b620043099190620054c3565b6200431590836200519b565b9050620043238382620033e7565b156200433557620015fe838262003c0e565b620015fe838362003c0e565b606f5460ff166200436557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b620043a5828262002263565b620017df57604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052620015fe908490620044f7565b606f5460ff16156200443c57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff000000016001600160401b038316108015620044a9575067ffffffff00000001604083901c6001600160401b0316105b8015620044ca575067ffffffff00000001608083901c6001600160401b0316105b8015620044e2575067ffffffff0000000160c083901c105b15620044f057506001919050565b505f919050565b5f6200454d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620045cf9092919063ffffffff16565b805190915015620015fe57808060200190518101906200456e9190620054a2565b620015fe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000b72565b6060620045df84845f85620045e7565b949350505050565b6060824710156200464a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000b72565b5f80866001600160a01b0316858760405162004667919062005449565b5f6040518083038185875af1925050503d805f8114620046a3576040519150601f19603f3d011682016040523d82523d5f602084013e620046a8565b606091505b509150915062001e028783838760608315620047285782515f0362004720576001600160a01b0385163b620047205760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000b72565b5081620045df565b620045df83838151156200473f5781518083602001fd5b8060405162461bcd60e51b815260040162000b72919062004d55565b6108b880620054ec83390190565b6001600160a01b038116811462002e54575f80fd5b80356001600160401b038116811462003495575f80fd5b5f805f805f805f805f806101408b8d031215620047b0575f80fd5b8a35620047bd8162004769565b9950620047cd60208c016200477e565b9850620047dd60408c016200477e565b975060608b0135620047ef8162004769565b965060808b0135620048018162004769565b955060a08b0135620048138162004769565b945060c08b0135620048258162004769565b935060e08b0135620048378162004769565b9250620048486101008c016200477e565b9150620048596101208c016200477e565b90509295989b9194979a5092959850565b6001600160401b0391909116815260200190565b803563ffffffff8116811462003495575f80fd5b5f8060408385031215620048a4575f80fd5b620048af836200487e565b9150620048bf602084016200477e565b90509250929050565b5f805f805f8060c08789031215620048de575f80fd5b8635620048eb8162004769565b9550620048fb602088016200477e565b94506200490b604088016200477e565b935060608701356200491d8162004769565b925060808701356200492f8162004769565b915060a0870135620049418162004769565b809150509295509295509295565b5f6020828403121562004960575f80fd5b62000f81826200487e565b80610300810183101562000f84575f80fd5b5f805f805f805f806103e0898b03121562004996575f80fd5b620049a1896200487e565b9750620049b160208a016200477e565b9650620049c160408a016200477e565b9550620049d160608a016200477e565b9450620049e160808a016200477e565b935060a0890135925060c0890135915062004a008a60e08b016200496b565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562004a28575f80fd5b62004a33896200487e565b975062004a4360208a016200477e565b965062004a5360408a016200477e565b955062004a6360608a016200477e565b94506080890135935060a0890135925060c089013562004a838162004769565b915062004a008a60e08b016200496b565b5f6020828403121562004aa5575f80fd5b813561ffff8116811462004ab7575f80fd5b9392505050565b5f6020828403121562004acf575f80fd5b5035919050565b5f806040838503121562004ae8575f80fd5b82359150602083013562004afc8162004769565b809150509250929050565b5f6020828403121562004b18575f80fd5b62000f81826200477e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171562004b625762004b6262004b23565b604052919050565b5f82601f83011262004b7a575f80fd5b81356001600160401b0381111562004b965762004b9662004b23565b62004bab601f8201601f191660200162004b37565b81815284602083860101111562004bc0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121562004bf3575f80fd5b62004bfe886200487e565b965062004c0e602089016200477e565b9550604088013562004c208162004769565b9450606088013562004c328162004769565b9350608088013562004c448162004769565b925060a08801356001600160401b038082111562004c60575f80fd5b62004c6e8b838c0162004b6a565b935060c08a013591508082111562004c84575f80fd5b5062004c938a828b0162004b6a565b91505092959891949750929550565b5f805f805f8060c0878903121562004cb8575f80fd5b62004cc3876200487e565b955062004cd3602088016200477e565b945062004ce3604088016200477e565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562004d2057818101518382015260200162004d06565b50505f910152565b5f815180845262004d4181602086016020860162004d04565b601f01601f19169290920160200192915050565b602081525f62000f81602083018462004d28565b5f602080838503121562004d7b575f80fd5b82356001600160401b038082111562004d92575f80fd5b818501915085601f83011262004da6575f80fd5b81358181111562004dbb5762004dbb62004b23565b8060051b915062004dce84830162004b37565b818152918301840191848101908884111562004de8575f80fd5b938501935b8385101562004e085784358252938501939085019062004ded565b98975050505050505050565b5f806040838503121562004e26575f80fd5b62004e31836200477e565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f805f806060858703121562004e67575f80fd5b843562004e748162004769565b935062004e84602086016200487e565b925060408501356001600160401b038082111562004ea0575f80fd5b818701915087601f83011262004eb4575f80fd5b81358181111562004ec3575f80fd5b88602082850101111562004ed5575f80fd5b95989497505060200194505050565b5f6020828403121562004ef5575f80fd5b813562004ab78162004769565b803560ff8116811462003495575f80fd5b5f805f805f8060c0878903121562004f29575f80fd5b863562004f368162004769565b9550602087013562004f488162004769565b945062004f58604088016200477e565b935062004f68606088016200477e565b92506080870135915062004f7f60a0880162004f02565b90509295509295509295565b5f805f805f8060c0878903121562004fa1575f80fd5b863562004fae8162004769565b9550602087013562004fc08162004769565b945062004fd0604088016200477e565b935062004fe06060880162004f02565b92506080870135915060a08701356001600160401b0381111562005002575f80fd5b6200501089828a0162004b6a565b9150509295509295509295565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b80545f90600181811c90808316806200508557607f831692505b60208084108203620050a557634e487b7160e01b5f52602260045260245ffd5b83885260208801828015620050c35760018114620050da5762005105565b60ff198716825285151560051b8201975062005105565b5f898152602090205f5b87811015620050ff57815484820152908601908401620050e4565b83019850505b5050505050505092915050565b6001600160a01b0386811682528516602082015260a0604082018190525f906200513f908301866200506b565b82810360608401526200515381866200506b565b9150508260808301529695505050505050565b6001600160401b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115620051be57620051be62005187565b5092915050565b808202811582820484141762000f845762000f8462005187565b5f63ffffffff808316818103620051fa57620051fa62005187565b6001019392505050565b6001600160a01b038481168252831660208201526060604082018190525f90620052319083018462004d28565b95945050505050565b6001600160a01b038781168252868116602083015263ffffffff861660408301528416606082015260c0608082018190525f906200527b9083018562004d28565b82810360a08401526200528f818562004d28565b9998505050505050505050565b6001600160401b03828116828216039080821115620051be57620051be62005187565b5f6001600160401b038281166002600160401b03198101620051fa57620051fa62005187565b634e487b7160e01b5f52603260045260245ffd5b8082018082111562000f845762000f8462005187565b5f6001820162005323576200532362005187565b5060010190565b5f602082840312156200533b575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f8262005367576200536762005342565b500490565b5f826200537d576200537d62005342565b500690565b8181038181111562000f845762000f8462005187565b918252602082015260400190565b5f81620053b757620053b762005187565b505f190190565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b6001600160a01b038781168252861660208201526001600160401b038516604082015260ff841660608201526080810183905260c060a082018190525f9062004e089083018462004d28565b5f82516200545c81846020870162004d04565b9190910192915050565b6103208101610300808584378201835f5b60018110156200549857815183526020928301929091019060010162005477565b5050509392505050565b5f60208284031215620054b3575f80fd5b8151801515811462004ab7575f80fd5b5f6001600160401b0383811680620054df57620054df62005342565b9216919091049291505056fe60a06040526040516108b83803806108b883398101604081905261002291610349565b828161002e8282610056565b50506001600160a01b03821660805261004e61004960805190565b6100b4565b50505061042e565b61005f82610121565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100a8576100a3828261019f565b505050565b6100b0610212565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100f35f80516020610898833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161011e81610233565b50565b806001600160a01b03163b5f0361015b57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b0316846040516101bb9190610413565b5f60405180830381855af49150503d805f81146101f3576040519150601f19603f3d011682016040523d82523d5f602084013e6101f8565b606091505b509092509050610209858383610270565b95945050505050565b34156102315760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661025c57604051633173bdd160e11b81525f6004820152602401610152565b805f8051602061089883398151915261017e565b60608261028557610280826102cf565b6102c8565b815115801561029c57506001600160a01b0384163b155b156102c557604051639996b31560e01b81526001600160a01b0385166004820152602401610152565b50805b9392505050565b8051156102df5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461030e575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015610341578181015183820152602001610329565b50505f910152565b5f805f6060848603121561035b575f80fd5b610364846102f8565b9250610372602085016102f8565b60408501519092506001600160401b038082111561038e575f80fd5b818601915086601f8301126103a1575f80fd5b8151818111156103b3576103b3610313565b604051601f8201601f19908116603f011681019083821181831017156103db576103db610313565b816040528281528960208487010111156103f3575f80fd5b610404836020830160208801610327565b80955050505050509250925092565b5f8251610424818460208701610327565b9190910192915050565b6080516104536104455f395f601001526104535ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610069575f356001600160e01b03191663278f794360e11b146100615761005f61006d565b565b61005f61007d565b61005f5b61005f6100786100ab565b6100cf565b5f8061008c36600481846102ba565b81019061009991906102f5565b915091506100a782826100ed565b5050565b5f6100ca5f805160206103fe833981519152546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156100e9573d5ff35b3d5ffd5b6100f682610147565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561013f5761013a82826101aa565b505050565b6100a761021c565b806001600160a01b03163b5f0361017c5780604051634c9c8ce360e01b815260040161017391906103bd565b60405180910390fd5b5f805160206103fe83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516101c691906103d1565b5f60405180830381855af49150503d805f81146101fe576040519150601f19603f3d011682016040523d82523d5f602084013e610203565b606091505b509150915061021385838361023b565b95945050505050565b341561005f5760405163b398979f60e01b815260040160405180910390fd5b6060826102505761024b82610291565b61028a565b815115801561026757506001600160a01b0384163b155b156102875783604051639996b31560e01b815260040161017391906103bd565b50805b9392505050565b8051156102a15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f80858511156102c8575f80fd5b838611156102d4575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610306575f80fd5b82356001600160a01b038116811461031c575f80fd5b915060208301356001600160401b0380821115610337575f80fd5b818501915085601f83011261034a575f80fd5b81358181111561035c5761035c6102e1565b604051601f8201601f19908116603f01168101908382118183101715610384576103846102e1565b8160405282815288602084870101111561039c575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b5f82515f5b818110156103f057602081860181015185830152016103d6565b505f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220d3b91b386436af95579d7d767b3c6e83ae79b09bd8dd9344bddb95185404c56564736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610373cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f066156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fbab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bdac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024983dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68ea5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db19b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff285951141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545ea0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4a26469706673582212200ce6fcb9a490f6b26945426ab051c2a0bf7369618afe91f355793beb03787e1964736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonRollupManagerMockInternalTest.json b/compiled-contracts/PolygonRollupManagerMockInternalTest.json index c451d1493..51771aefc 100644 --- a/compiled-contracts/PolygonRollupManagerMockInternalTest.json +++ b/compiled-contracts/PolygonRollupManagerMockInternalTest.json @@ -1965,8 +1965,8 @@ "type": "function" } ], - "bytecode": "0x60e060405234801562000010575f80fd5b5060405162006fae38038062006fae83398101604081905262000033916200013c565b6001600160a01b0380841660805280831660c052811660a0528282826200005962000065565b5050505050506200018d565b5f54610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116101562000122575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000139575f80fd5b50565b5f805f606084860312156200014f575f80fd5b83516200015c8162000124565b60208501519093506200016f8162000124565b6040850151909250620001828162000124565b809150509250925092565b60805160a05160c051616dbe620001f05f395f8181610b8a0152818161273d015261444d01525f818161090f015281816135c5015261481e01525f8181610add01528181611358015281816115780152818161242b01526146f80152616dbe5ff3fe608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000b84578063f34eb8eb1462000bac578063f4e926751462000bc3578063f9c4c2ae1462000bd4575f80fd5b8063dbc169761462000b42578063dde0ff771462000b4c578063e0bfd3d21462000b6d575f80fd5b8063d02103ca11620000eb578063d02103ca1462000ad7578063d5073f6f1462000aff578063d547741f1462000b16578063d939b3151462000b2d575f80fd5b8063c1acbc341462000a6f578063c4c928c21462000a98578063ceee281d1462000aaf575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d9914620008ff578063a3c573eb1462000909578063afd23cbe1462000957578063b99d0ad7146200098e575f80fd5b80639c9f3dfe14620008c9578063a066215c14620008e0578063a217fddf14620008f7575f80fd5b806391d1485411620001bb57806391d14854146200086057806399f5634e14620008a85780639a908e7314620008b2575f80fd5b8063841b24d7146200080157806387c20c0114620008325780638bd4f0711462000849575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000785578063727885e9146200079c5780637975fcfe14620007b35780637fb6e76a14620007d9575f80fd5b806355a71ee0146200062957806360469169146200066d57806365c0504d1462000677575f80fd5b806336568abe116200029757806336568abe14620005f2578063394218e91462000609578063477fa2701462000620575f80fd5b806325280169146200050b5780632f2ff15d14620005c657806330c27dde14620005dd575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae146200048f5780631816b7e514620004b65780632072f6c514620004cd578063248a9ca314620004d7575f80fd5b80631489ed10146200045357806315064c96146200046a5780631608859c1462000478575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040457806311f6b287146200042557806312b86e19146200043c575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003dc575b5f80fd5b620003a7620003a136600462005780565b62000d3e565b005b608454620003be9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b620003f3620003ed36600462005869565b62001224565b6040519015158152602001620003d3565b608554620003be9068010000000000000000900467ffffffffffffffff1681565b620003be620004363660046200589f565b6200124d565b620003a76200044d366004620058cd565b6200126c565b620003a7620004643660046200595f565b6200148c565b606f54620003f39060ff1681565b620003a76200048936600462005869565b6200166b565b607e54620004a09063ffffffff1681565b60405163ffffffff9091168152602001620003d3565b620003a7620004c7366004620059e4565b62001747565b620003a762001844565b620004fc620004e836600462005a0e565b5f9081526034602052604090206001015490565b604051908152602001620003d3565b620005916200051c36600462005869565b60408051606080820183525f808352602080840182905292840181905263ffffffff9590951685526081825282852067ffffffffffffffff9485168652600301825293829020825194850183528054855260010154808416918501919091526801000000000000000090049091169082015290565b604080518251815260208084015167ffffffffffffffff908116918301919091529282015190921690820152606001620003d3565b620003a7620005d736600462005a26565b62001958565b608754620003be9067ffffffffffffffff1681565b620003a76200060336600462005a26565b62001980565b620003a76200061a36600462005a57565b620019e0565b608654620004fc565b620004fc6200063a36600462005869565b63ffffffff82165f90815260816020908152604080832067ffffffffffffffff8516845260020190915290205492915050565b620004fc62001afb565b6200072d620006883660046200589f565b607f6020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff918216929182169167ffffffffffffffff740100000000000000000000000000000000000000008204169160ff7c010000000000000000000000000000000000000000000000000000000083048116927d0100000000000000000000000000000000000000000000000000000000009004169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015267ffffffffffffffff9093169385019390935260ff166060840152901515608083015260a082015260c001620003d3565b620003a7620007963660046200589f565b62001b12565b620003a7620007ad36600462005b4f565b62001c8d565b620007ca620007c436600462005c16565b620021f6565b604051620003d3919062005ce7565b620004a0620007ea36600462005a57565b60836020525f908152604090205463ffffffff1681565b608454620003be907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b620003a7620008433660046200595f565b62002228565b620003a76200085a366004620058cd565b62002625565b620003f36200087136600462005a26565b5f91825260346020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b620004fc620026f6565b620003be620008c336600462005cfb565b62002804565b620003a7620008da36600462005a57565b62002a54565b620003a7620008f136600462005a57565b62002b3d565b620004fc5f81565b620004fc62002c27565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620003d3565b6085546200097a90700100000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001620003d3565b62000a296200099f36600462005869565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff9690961681526081865283812067ffffffffffffffff958616825260040186528390208351918201845280548086168352680100000000000000009004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d391905f60808201905067ffffffffffffffff80845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003be90700100000000000000000000000000000000900467ffffffffffffffff1681565b620003a762000aa936600462005d26565b6200300f565b620004a062000ac036600462005db8565b60826020525f908152604090205463ffffffff1681565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000b1036600462005a0e565b6200345d565b620003a762000b2736600462005a26565b62003512565b608554620003be9067ffffffffffffffff1681565b620003a76200353a565b608454620003be9068010000000000000000900467ffffffffffffffff1681565b620003a762000b7e36600462005de7565b62003644565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000bbd36600462005e5f565b62003758565b608054620004a09063ffffffff1681565b62000cb062000be53660046200589f565b60816020525f90815260409020805460018201546005830154600684015460079094015473ffffffffffffffffffffffffffffffffffffffff80851695740100000000000000000000000000000000000000009586900467ffffffffffffffff908116969286169592909204821693928282169268010000000000000000808404821693700100000000000000000000000000000000808204841694780100000000000000000000000000000000000000000000000090920484169380831693830416910460ff168c565b6040805173ffffffffffffffffffffffffffffffffffffffff9d8e16815267ffffffffffffffff9c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d3565b5f54600290610100900460ff1615801562000d5f57505f5460ff8083169116105b62000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117179055608580546084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8e8116919091029190911790915567016345785d8a00006086558c167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116176907080000000000000000177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff167103ea0000000000000000000000000000000017905562000efa6200399d565b62000f267f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003a35565b62000f325f8862003a35565b62000f5e7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003a35565b62000f8a7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003a35565b62000fb67f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003a35565b62000fe27fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003a35565b6200100e7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003a35565b6200103a7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003a35565b620010667fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003a35565b620010b27f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f062003a41565b620010de7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003a35565b6200110a7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003a35565b620011567f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff28595162003a41565b620011827f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003a35565b620011ae7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003a35565b620011ba5f3362003a35565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062001244908362003a8b565b90505b92915050565b63ffffffff81165f908152608160205260408120620012479062003ad1565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012988162003b67565b63ffffffff89165f908152608160205260409020620012be818a8a8a8a8a8a8a62003b73565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562001356576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200139c62002c27565b6040518263ffffffff1660e01b8152600401620013bb91815260200190565b5f604051808303815f87803b158015620013d3575f80fd5b505af1158015620013e6573d5f803e3d5ffd5b50506084805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a8000000000000000000000000000000000000000000000000017905550506040805167ffffffffffffffff881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620014b88162003b67565b63ffffffff89165f908152608160205260409020620014de818a8a8a8a8a8a8a62004052565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8a81169182029290921783555f90815260028401602052604090208790556005830188905590547001000000000000000000000000000000009004161562001576576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d620015bc62002c27565b6040518263ffffffff1660e01b8152600401620015db91815260200190565b5f604051808303815f87803b158015620015f3575f80fd5b505af115801562001606573d5f803e3d5ffd5b50506040805167ffffffffffffffff8b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200173657606f5460ff1615620016f3576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620016ff818362003a8b565b62001736576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001742818362004598565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db1620017738162003b67565b6103e88261ffff1610806200178d57506103ff8261ffff16115b15620017c5576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200194c57608454700100000000000000000000000000000000900467ffffffffffffffff161580620018e257506084544290620018d69062093a8090700100000000000000000000000000000000900467ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b806200191457506087544290620019089062093a809067ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b156200194c576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019566200481c565b565b5f82815260346020526040902060010154620019748162003b67565b620017428383620048a3565b73ffffffffffffffffffffffffffffffffffffffff81163314620019d0576040517f5a568e6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019dc82826200495f565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001a0c8162003b67565b606f5460ff1662001a7d5760845467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161062001a7d576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200162001838565b5f608654606462001b0d919062005f4a565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001b3e8162003b67565b63ffffffff8216158062001b5d5750607e5463ffffffff908116908316115b1562001b95576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff82165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001c0e576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000017905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001cb98162003b67565b63ffffffff8816158062001cd85750607e5463ffffffff908116908916115b1562001d10576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001d89576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88165f9081526083602052604090205463ffffffff161562001de0576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608080545f9190829062001dfa9063ffffffff1662005f64565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f808252602082019283905293945073ffffffffffffffffffffffffffffffffffffffff90921691309162001e549062005738565b62001e629392919062005f89565b604051809103905ff08015801562001e7c573d5f803e3d5ffd5b5090508160835f8c67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360010160149054906101000a900467ffffffffffffffff168160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360020154816002015f8067ffffffffffffffff1681526020019081526020015f20819055508b63ffffffff168160070160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162002153949392919063ffffffff94909416845273ffffffffffffffffffffffffffffffffffffffff928316602085015267ffffffffffffffff91909116604084015216606082015260800190565b60405180910390a26040517f7125702200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690637125702290620021b9908d908d9088908e908e908e9060040162005fcc565b5f604051808303815f87803b158015620021d1575f80fd5b505af1158015620021e4573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f9081526081602052604090206060906200221d90878787878762004a19565b979650505050505050565b606f5460ff161562002266576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020908152604080832060845467ffffffffffffffff8a811686526003830190945291909320600101544292620022ca92780100000000000000000000000000000000000000000000000090048116911662005f1f565b67ffffffffffffffff1611156200230d576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86200231c88886200603b565b67ffffffffffffffff1611156200235f576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62002371818989898989898962004052565b6200237d818762004be0565b60855467ffffffffffffffff165f03620024c3576006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562002429576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200246f62002c27565b6040518263ffffffff1660e01b81526004016200248e91815260200190565b5f604051808303815f87803b158015620024a6575f80fd5b505af1158015620024b9573d5f803e3d5ffd5b50505050620025c5565b620024ce8162004de7565b600681018054700100000000000000000000000000000000900467ffffffffffffffff1690601062002500836200605f565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154700100000000000000000000000000000000900487165f90815260048a0190935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b6040805167ffffffffffffffff8816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff161562002663576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002689818989898989898962003b73565b67ffffffffffffffff87165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620026eb6200481c565b505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801562002783573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620027a991906200607e565b6084549091505f90620027d59067ffffffffffffffff680100000000000000008204811691166200603b565b67ffffffffffffffff169050805f03620027f1575f9250505090565b620027fd8183620060c3565b9250505090565b606f545f9060ff161562002844576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526082602052604081205463ffffffff169081900362002894576040517f71653c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8367ffffffffffffffff165f03620028d8576040517f2590ccf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200290b90849067ffffffffffffffff1662005f1f565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560068301541690505f62002941878362005f1f565b60068401805467ffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b019091529290932090518155915160019290920180549151841668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169290931691909117179055905062002a058362004de7565b60405167ffffffffffffffff8216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002a808162003b67565b606f5460ff1662002ad55760855467ffffffffffffffff9081169083161062002ad5576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200162001838565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002b698162003b67565b620151808267ffffffffffffffff16111562002bb1576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c289060200162001838565b6080545f9063ffffffff1680820362002c4157505f919050565b5f8167ffffffffffffffff81111562002c5e5762002c5e62005a73565b60405190808252806020026020018201604052801562002c88578160200160208202803683370190505b5090505f5b8281101562002cf85760815f62002ca6836001620060d9565b63ffffffff1663ffffffff1681526020019081526020015f206005015482828151811062002cd85762002cd8620060ef565b60209081029190910101528062002cef816200611c565b91505062002c8d565b505f60205b8360011462002f51575f62002d1460028662006156565b62002d21600287620060c3565b62002d2d9190620060d9565b90505f8167ffffffffffffffff81111562002d4c5762002d4c62005a73565b60405190808252806020026020018201604052801562002d76578160200160208202803683370190505b5090505f5b8281101562002efd5762002d916001846200616c565b8114801562002dac575062002da860028862006156565b6001145b1562002e34578562002dc082600262005f4a565b8151811062002dd35762002dd3620060ef565b60200260200101518560405160200162002df7929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002e225762002e22620060ef565b60200260200101818152505062002ee8565b8562002e4282600262005f4a565b8151811062002e555762002e55620060ef565b60200260200101518682600262002e6d919062005f4a565b62002e7a906001620060d9565b8151811062002e8d5762002e8d620060ef565b602002602001015160405160200162002eb0929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002edb5762002edb620060ef565b6020026020010181815250505b8062002ef4816200611c565b91505062002d7b565b50809450819550838460405160200162002f21929190918252602082015260400190565b604051602081830303815290604052805190602001209350828062002f469062006182565b935050505062002cfd565b5f835f8151811062002f675762002f67620060ef565b602002602001015190505f5b8281101562003005576040805160208101849052908101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002ffc906200611c565b91505062002f73565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac6200303b8162003b67565b63ffffffff841615806200305a5750607e5463ffffffff908116908516115b1562003092576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f9081526082602052604081205463ffffffff1690819003620030f8576040517f74a086a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8181165f9081526081602052604090206007810154909187166801000000000000000090910467ffffffffffffffff160362003165576040517f4f61d51900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff1615159003620031de576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101546007830154700100000000000000000000000000000000900460ff9081167c010000000000000000000000000000000000000000000000000000000090920416146200325b576040517fb541abe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001808201805491840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9094169384178255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027fffffffff000000000000000000000000000000000000000000000000000000009092169092171790556007820180546801000000000000000063ffffffff8a16027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555f62003343846200124d565b6007840180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831617905582546040517f4f1ef28600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8b811692634f1ef28692620033d79216908b908b90600401620061b9565b5f604051808303815f87803b158015620033ef575f80fd5b505af115801562003402573d5f803e3d5ffd5b50506040805163ffffffff8c8116825267ffffffffffffffff86166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb620034898162003b67565b683635c9adc5dea00000821180620034a45750633b9aca0082105b15620034dc576040517f8586952500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b29060200162001838565b5f828152603460205260409020600101546200352e8162003b67565b6200174283836200495f565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f4620035668162003b67565b608780547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517fdbc1697600000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163dbc16976916004808301925f92919082900301818387803b15801562003620575f80fd5b505af115801562003633573d5f803e3d5ffd5b505050506200364162004ef7565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e620036708162003b67565b67ffffffffffffffff84165f9081526083602052604090205463ffffffff1615620036c7576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87165f9081526082602052604090205463ffffffff16156200372a576040517fd409b93000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200373b88888888875f62004f86565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f590620037848162003b67565b607e80545f919082906200379e9063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018767ffffffffffffffff1681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b528989898989896040516200398b9695949392919062006222565b60405180910390a25050505050505050565b5f54610100900460ff1662001956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000de8565b620019dc8282620048a3565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60855467ffffffffffffffff8281165f9081526004850160205260408120549092429262003abe92918116911662005f1f565b67ffffffffffffffff1611159392505050565b60068101545f90700100000000000000000000000000000000900467ffffffffffffffff161562003b445750600681015467ffffffffffffffff70010000000000000000000000000000000090910481165f90815260049092016020526040909120546801000000000000000090041690565b506006015468010000000000000000900467ffffffffffffffff1690565b919050565b62003641813362005209565b60078801545f9067ffffffffffffffff908116908716101562003bc2576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88161562003ca957600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908916111562003c34576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff8088165f90815260048a016020526040902060028101548154909288811668010000000000000000909204161462003ca2576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062003d56565b5067ffffffffffffffff85165f9081526002890160205260409020548062003cfd576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff680100000000000000009091048116908716111562003d56576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908816118062003d9f57508767ffffffffffffffff168767ffffffffffffffff1611155b8062003dd95750600689015467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690881611155b1562003e11576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781165f90815260048b01602052604090205468010000000000000000900481169086161462003e76576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62003e878a888888868962004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ebd919062006287565b602060405180830381855afa15801562003ed9573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003efe91906200607e565b62003f0a919062006156565b60018c01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a9162003f7491889190600401620062a4565b602060405180830381865afa15801562003f90573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fb69190620062e0565b62003fed576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff89165f90815260048c01602052604090206002015485900362004045576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b5f806200405f8a62003ad1565b60078b015490915067ffffffffffffffff9081169089161015620040af576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff891615620041985760068a015467ffffffffffffffff7001000000000000000000000000000000009091048116908a16111562004121576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808a165f90815260048c01602052604090206002810154815490945090918a811668010000000000000000909204161462004191576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506200423c565b67ffffffffffffffff88165f90815260028b016020526040902054915081620041ed576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168867ffffffffffffffff1611156200423c576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff16116200428a576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200429b8b8a8a8a878b62004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620042d1919062006287565b602060405180830381855afa158015620042ed573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200431291906200607e565b6200431e919062006156565b60018d01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a916200438891899190600401620062a4565b602060405180830381865afa158015620043a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043ca9190620062e0565b62004401576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200440e848b6200603b565b905062004475878267ffffffffffffffff166200442a620026f6565b62004436919062005f4a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919062005272565b80608460088282829054906101000a900467ffffffffffffffff166200449c919062005f1f565b82546101009290920a67ffffffffffffffff818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000428416021790558e546040517f32c2d153000000000000000000000000000000000000000000000000000000008152918d166004830152602482018b905233604483015273ffffffffffffffffffffffffffffffffffffffff1691506332c2d153906064015f604051808303815f87803b15801562004572575f80fd5b505af115801562004585573d5f803e3d5ffd5b5050505050505050505050505050505050565b600682015467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216111580620045fb5750600682015467ffffffffffffffff7001000000000000000000000000000000009091048116908216115b1562004633576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8181165f818152600485016020908152604080832080546006890180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000092839004909816918202979097178755600280830154828752908a01909452919093209190915560018201546005870155835477ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000909302929092179092557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200473c62002c27565b6040518263ffffffff1660e01b81526004016200475b91815260200190565b5f604051808303815f87803b15801562004773575f80fd5b505af115801562004786573d5f803e3d5ffd5b5050855473ffffffffffffffffffffffffffffffffffffffff165f908152608260209081526040918290205460028701546001880154845167ffffffffffffffff898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562004882575f80fd5b505af115801562004895573d5f803e3d5ffd5b505050506200195662005301565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b67ffffffffffffffff8086165f818152600389016020526040808220549388168252902054606092911580159062004a4f575081155b1562004a87576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8062004abf576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62004aca8462005394565b62004b01576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b885460018a01546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b821660748401527401000000000000000000000000000000000000000094859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f62004bec8362003ad1565b9050815f8062004bfd84846200603b565b60855467ffffffffffffffff91821692505f9162004c299168010000000000000000900416426200616c565b90505b8467ffffffffffffffff168467ffffffffffffffff161462004cbc5767ffffffffffffffff8085165f9081526003890160205260409020600181015490911682101562004c9657600181015468010000000000000000900467ffffffffffffffff16945062004cb5565b62004ca286866200603b565b67ffffffffffffffff1693505062004cbc565b5062004c2c565b5f62004cc984846200616c565b90508381101562004d2757808403600c811162004ce7578062004cea565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a608654028162004d1c5762004d1c62006096565b046086555062004d9e565b838103600c811162004d3a578062004d3d565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004d765762004d7662006096565b04905080608654670de0b6b3a7640000028162004d975762004d9762006096565b0460865550505b683635c9adc5dea00000608654111562004dc557683635c9adc5dea0000060865562004ddd565b633b9aca00608654101562004ddd57633b9aca006086555b5050505050505050565b600681015467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116700100000000000000000000000000000000909204161115620036415760068101545f9062004e6a907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600162005f1f565b905062004e78828262003a8b565b15620019dc5760068201545f9060029062004eb3908490700100000000000000000000000000000000900467ffffffffffffffff166200603b565b62004ebf919062006301565b62004ecb908362005f1f565b905062004ed9838262003a8b565b1562004eeb5762001742838262004598565b62001742838362004598565b606f5460ff1662004f34576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b608080545f918291829062004fa19063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858260010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555086826001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084825f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620051f695949392919067ffffffffffffffff958616815273ffffffffffffffffffffffffffffffffffffffff949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc576040517fec2b7c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052620017429084906200541b565b606f5460ff16156200533f576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff0000000167ffffffffffffffff8316108015620053cc575067ffffffff00000001604083901c67ffffffffffffffff16105b8015620053ee575067ffffffff00000001608083901c67ffffffffffffffff16105b801562005406575067ffffffff0000000160c083901c105b156200541457506001919050565b505f919050565b5f6200547e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200552d9092919063ffffffff16565b8051909150156200174257808060200190518101906200549f9190620062e0565b62001742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000de8565b60606200553d84845f8562005545565b949350505050565b606082471015620055d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000de8565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405162005603919062006287565b5f6040518083038185875af1925050503d805f81146200563f576040519150601f19603f3d011682016040523d82523d5f602084013e62005644565b606091505b50915091506200221d8783838760608315620056eb5782515f03620056e35773ffffffffffffffffffffffffffffffffffffffff85163b620056e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000de8565b50816200553d565b6200553d8383815115620057025781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de8919062005ce7565b610a5e806200632b83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462003641575f80fd5b803567ffffffffffffffff8116811462003b62575f80fd5b5f805f805f805f805f806101408b8d0312156200579b575f80fd5b8a35620057a88162005746565b9950620057b860208c0162005768565b9850620057c860408c0162005768565b975060608b0135620057da8162005746565b965060808b0135620057ec8162005746565b955060a08b0135620057fe8162005746565b945060c08b0135620058108162005746565b935060e08b0135620058228162005746565b9250620058336101008c0162005768565b9150620058446101208c0162005768565b90509295989b9194979a5092959850565b803563ffffffff8116811462003b62575f80fd5b5f80604083850312156200587b575f80fd5b620058868362005855565b9150620058966020840162005768565b90509250929050565b5f60208284031215620058b0575f80fd5b620012448262005855565b80610300810183101562001247575f80fd5b5f805f805f805f806103e0898b031215620058e6575f80fd5b620058f18962005855565b97506200590160208a0162005768565b96506200591160408a0162005768565b95506200592160608a0162005768565b94506200593160808a0162005768565b935060a0890135925060c08901359150620059508a60e08b01620058bb565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562005978575f80fd5b620059838962005855565b97506200599360208a0162005768565b9650620059a360408a0162005768565b9550620059b360608a0162005768565b94506080890135935060a0890135925060c0890135620059d38162005746565b9150620059508a60e08b01620058bb565b5f60208284031215620059f5575f80fd5b813561ffff8116811462005a07575f80fd5b9392505050565b5f6020828403121562005a1f575f80fd5b5035919050565b5f806040838503121562005a38575f80fd5b82359150602083013562005a4c8162005746565b809150509250929050565b5f6020828403121562005a68575f80fd5b620012448262005768565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011262005ab0575f80fd5b813567ffffffffffffffff8082111562005ace5762005ace62005a73565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562005b175762005b1762005a73565b8160405283815286602085880101111562005b30575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562005b66575f80fd5b62005b718862005855565b965062005b816020890162005768565b9550604088013562005b938162005746565b9450606088013562005ba58162005746565b9350608088013562005bb78162005746565b925060a088013567ffffffffffffffff8082111562005bd4575f80fd5b62005be28b838c0162005aa0565b935060c08a013591508082111562005bf8575f80fd5b5062005c078a828b0162005aa0565b91505092959891949750929550565b5f805f805f8060c0878903121562005c2c575f80fd5b62005c378762005855565b955062005c476020880162005768565b945062005c576040880162005768565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562005c9457818101518382015260200162005c7a565b50505f910152565b5f815180845262005cb581602086016020860162005c78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f62001244602083018462005c9c565b5f806040838503121562005d0d575f80fd5b62005d188362005768565b946020939093013593505050565b5f805f806060858703121562005d3a575f80fd5b843562005d478162005746565b935062005d576020860162005855565b9250604085013567ffffffffffffffff8082111562005d74575f80fd5b818701915087601f83011262005d88575f80fd5b81358181111562005d97575f80fd5b88602082850101111562005da9575f80fd5b95989497505060200194505050565b5f6020828403121562005dc9575f80fd5b813562005a078162005746565b803560ff8116811462003b62575f80fd5b5f805f805f8060c0878903121562005dfd575f80fd5b863562005e0a8162005746565b9550602087013562005e1c8162005746565b945062005e2c6040880162005768565b935062005e3c6060880162005768565b92506080870135915062005e5360a0880162005dd6565b90509295509295509295565b5f805f805f8060c0878903121562005e75575f80fd5b863562005e828162005746565b9550602087013562005e948162005746565b945062005ea46040880162005768565b935062005eb46060880162005dd6565b92506080870135915060a087013567ffffffffffffffff81111562005ed7575f80fd5b62005ee589828a0162005aa0565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff81811683821601908082111562005f435762005f4362005ef2565b5092915050565b808202811582820484141762001247576200124762005ef2565b5f63ffffffff80831681810362005f7f5762005f7f62005ef2565b6001019392505050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005fc3606083018462005c9c565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200601a60c083018562005c9c565b82810360a08401526200602e818562005c9c565b9998505050505050505050565b67ffffffffffffffff82811682821603908082111562005f435762005f4362005ef2565b5f67ffffffffffffffff80831681810362005f7f5762005f7f62005ef2565b5f602082840312156200608f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82620060d457620060d462006096565b500490565b8082018082111562001247576200124762005ef2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200614f576200614f62005ef2565b5060010190565b5f8262006167576200616762006096565b500690565b8181038181111562001247576200124762005ef2565b5f8162006193576200619362005ef2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525067ffffffffffffffff8616604083015260ff8516606083015283608083015260c060a08301526200627b60c083018462005c9c565b98975050505050505050565b5f82516200629a81846020870162005c78565b9190910192915050565b6103208101610300808584378201835f5b6001811015620062d6578151835260209283019290910190600101620062b5565b5050509392505050565b5f60208284031215620062f1575f80fd5b8151801515811462005a07575f80fd5b5f67ffffffffffffffff808416806200631e576200631e62006096565b9216919091049291505056fe60a060405260405162000a5e38038062000a5e833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f8051602062000a3e833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f8051602062000a3e83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b6080516105ba620004845f395f601001526105ba5ff3fe608060405261000c61000e565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633036100a7575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef286000000000000000000000000000000000000000000000000000000001461009f5761009d6100ab565b565b61009d6100bb565b61009d5b61009d6100b66100e9565b61012d565b5f806100ca3660048184610410565b8101906100d79190610464565b915091506100e5828261014b565b5050565b5f6101287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b365f80375f80365f845af43d5f803e808015610147573d5ff35b3d5ffd5b610154826101b2565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101aa576101a58282610285565b505050565b6100e5610304565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361021f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516102ae9190610558565b5f60405180830381855af49150503d805f81146102e6576040519150601f19603f3d011682016040523d82523d5f602084013e6102eb565b606091505b50915091506102fb85838361033c565b95945050505050565b341561009d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103515761034c826103ce565b6103c7565b8151158015610375575073ffffffffffffffffffffffffffffffffffffffff84163b155b156103c4576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610216565b50805b9392505050565b8051156103de5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808585111561041e575f80fd5b8386111561042a575f80fd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610475575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610498575f80fd5b9150602083013567ffffffffffffffff808211156104b4575f80fd5b818501915085601f8301126104c7575f80fd5b8135818111156104d9576104d9610437565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051f5761051f610437565b81604052828152886020848701011115610537575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610577576020818601810151858301520161055d565b505f92019182525091905056fea26469706673582212200ca61bd1e45d482203caba1d216b11bb6992f1ce0f6427bfe86e65b2f53457a264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220a0a1c440ed85d9f9eeda617b6048e00cf12863c4f97b47eb0b40c67dec4452d164736f6c63430008140033", - "deployedBytecode": "0x608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000b84578063f34eb8eb1462000bac578063f4e926751462000bc3578063f9c4c2ae1462000bd4575f80fd5b8063dbc169761462000b42578063dde0ff771462000b4c578063e0bfd3d21462000b6d575f80fd5b8063d02103ca11620000eb578063d02103ca1462000ad7578063d5073f6f1462000aff578063d547741f1462000b16578063d939b3151462000b2d575f80fd5b8063c1acbc341462000a6f578063c4c928c21462000a98578063ceee281d1462000aaf575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d9914620008ff578063a3c573eb1462000909578063afd23cbe1462000957578063b99d0ad7146200098e575f80fd5b80639c9f3dfe14620008c9578063a066215c14620008e0578063a217fddf14620008f7575f80fd5b806391d1485411620001bb57806391d14854146200086057806399f5634e14620008a85780639a908e7314620008b2575f80fd5b8063841b24d7146200080157806387c20c0114620008325780638bd4f0711462000849575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000785578063727885e9146200079c5780637975fcfe14620007b35780637fb6e76a14620007d9575f80fd5b806355a71ee0146200062957806360469169146200066d57806365c0504d1462000677575f80fd5b806336568abe116200029757806336568abe14620005f2578063394218e91462000609578063477fa2701462000620575f80fd5b806325280169146200050b5780632f2ff15d14620005c657806330c27dde14620005dd575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae146200048f5780631816b7e514620004b65780632072f6c514620004cd578063248a9ca314620004d7575f80fd5b80631489ed10146200045357806315064c96146200046a5780631608859c1462000478575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040457806311f6b287146200042557806312b86e19146200043c575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003dc575b5f80fd5b620003a7620003a136600462005780565b62000d3e565b005b608454620003be9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b620003f3620003ed36600462005869565b62001224565b6040519015158152602001620003d3565b608554620003be9068010000000000000000900467ffffffffffffffff1681565b620003be620004363660046200589f565b6200124d565b620003a76200044d366004620058cd565b6200126c565b620003a7620004643660046200595f565b6200148c565b606f54620003f39060ff1681565b620003a76200048936600462005869565b6200166b565b607e54620004a09063ffffffff1681565b60405163ffffffff9091168152602001620003d3565b620003a7620004c7366004620059e4565b62001747565b620003a762001844565b620004fc620004e836600462005a0e565b5f9081526034602052604090206001015490565b604051908152602001620003d3565b620005916200051c36600462005869565b60408051606080820183525f808352602080840182905292840181905263ffffffff9590951685526081825282852067ffffffffffffffff9485168652600301825293829020825194850183528054855260010154808416918501919091526801000000000000000090049091169082015290565b604080518251815260208084015167ffffffffffffffff908116918301919091529282015190921690820152606001620003d3565b620003a7620005d736600462005a26565b62001958565b608754620003be9067ffffffffffffffff1681565b620003a76200060336600462005a26565b62001980565b620003a76200061a36600462005a57565b620019e0565b608654620004fc565b620004fc6200063a36600462005869565b63ffffffff82165f90815260816020908152604080832067ffffffffffffffff8516845260020190915290205492915050565b620004fc62001afb565b6200072d620006883660046200589f565b607f6020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff918216929182169167ffffffffffffffff740100000000000000000000000000000000000000008204169160ff7c010000000000000000000000000000000000000000000000000000000083048116927d0100000000000000000000000000000000000000000000000000000000009004169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015267ffffffffffffffff9093169385019390935260ff166060840152901515608083015260a082015260c001620003d3565b620003a7620007963660046200589f565b62001b12565b620003a7620007ad36600462005b4f565b62001c8d565b620007ca620007c436600462005c16565b620021f6565b604051620003d3919062005ce7565b620004a0620007ea36600462005a57565b60836020525f908152604090205463ffffffff1681565b608454620003be907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b620003a7620008433660046200595f565b62002228565b620003a76200085a366004620058cd565b62002625565b620003f36200087136600462005a26565b5f91825260346020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b620004fc620026f6565b620003be620008c336600462005cfb565b62002804565b620003a7620008da36600462005a57565b62002a54565b620003a7620008f136600462005a57565b62002b3d565b620004fc5f81565b620004fc62002c27565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620003d3565b6085546200097a90700100000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001620003d3565b62000a296200099f36600462005869565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff9690961681526081865283812067ffffffffffffffff958616825260040186528390208351918201845280548086168352680100000000000000009004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d391905f60808201905067ffffffffffffffff80845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003be90700100000000000000000000000000000000900467ffffffffffffffff1681565b620003a762000aa936600462005d26565b6200300f565b620004a062000ac036600462005db8565b60826020525f908152604090205463ffffffff1681565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000b1036600462005a0e565b6200345d565b620003a762000b2736600462005a26565b62003512565b608554620003be9067ffffffffffffffff1681565b620003a76200353a565b608454620003be9068010000000000000000900467ffffffffffffffff1681565b620003a762000b7e36600462005de7565b62003644565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000bbd36600462005e5f565b62003758565b608054620004a09063ffffffff1681565b62000cb062000be53660046200589f565b60816020525f90815260409020805460018201546005830154600684015460079094015473ffffffffffffffffffffffffffffffffffffffff80851695740100000000000000000000000000000000000000009586900467ffffffffffffffff908116969286169592909204821693928282169268010000000000000000808404821693700100000000000000000000000000000000808204841694780100000000000000000000000000000000000000000000000090920484169380831693830416910460ff168c565b6040805173ffffffffffffffffffffffffffffffffffffffff9d8e16815267ffffffffffffffff9c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d3565b5f54600290610100900460ff1615801562000d5f57505f5460ff8083169116105b62000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117179055608580546084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8e8116919091029190911790915567016345785d8a00006086558c167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116176907080000000000000000177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff167103ea0000000000000000000000000000000017905562000efa6200399d565b62000f267f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003a35565b62000f325f8862003a35565b62000f5e7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003a35565b62000f8a7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003a35565b62000fb67f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003a35565b62000fe27fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003a35565b6200100e7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003a35565b6200103a7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003a35565b620010667fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003a35565b620010b27f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f062003a41565b620010de7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003a35565b6200110a7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003a35565b620011567f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff28595162003a41565b620011827f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003a35565b620011ae7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003a35565b620011ba5f3362003a35565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062001244908362003a8b565b90505b92915050565b63ffffffff81165f908152608160205260408120620012479062003ad1565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012988162003b67565b63ffffffff89165f908152608160205260409020620012be818a8a8a8a8a8a8a62003b73565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562001356576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200139c62002c27565b6040518263ffffffff1660e01b8152600401620013bb91815260200190565b5f604051808303815f87803b158015620013d3575f80fd5b505af1158015620013e6573d5f803e3d5ffd5b50506084805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a8000000000000000000000000000000000000000000000000017905550506040805167ffffffffffffffff881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620014b88162003b67565b63ffffffff89165f908152608160205260409020620014de818a8a8a8a8a8a8a62004052565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8a81169182029290921783555f90815260028401602052604090208790556005830188905590547001000000000000000000000000000000009004161562001576576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d620015bc62002c27565b6040518263ffffffff1660e01b8152600401620015db91815260200190565b5f604051808303815f87803b158015620015f3575f80fd5b505af115801562001606573d5f803e3d5ffd5b50506040805167ffffffffffffffff8b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200173657606f5460ff1615620016f3576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620016ff818362003a8b565b62001736576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001742818362004598565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db1620017738162003b67565b6103e88261ffff1610806200178d57506103ff8261ffff16115b15620017c5576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200194c57608454700100000000000000000000000000000000900467ffffffffffffffff161580620018e257506084544290620018d69062093a8090700100000000000000000000000000000000900467ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b806200191457506087544290620019089062093a809067ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b156200194c576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019566200481c565b565b5f82815260346020526040902060010154620019748162003b67565b620017428383620048a3565b73ffffffffffffffffffffffffffffffffffffffff81163314620019d0576040517f5a568e6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019dc82826200495f565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001a0c8162003b67565b606f5460ff1662001a7d5760845467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161062001a7d576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200162001838565b5f608654606462001b0d919062005f4a565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001b3e8162003b67565b63ffffffff8216158062001b5d5750607e5463ffffffff908116908316115b1562001b95576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff82165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001c0e576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000017905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001cb98162003b67565b63ffffffff8816158062001cd85750607e5463ffffffff908116908916115b1562001d10576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001d89576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88165f9081526083602052604090205463ffffffff161562001de0576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608080545f9190829062001dfa9063ffffffff1662005f64565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f808252602082019283905293945073ffffffffffffffffffffffffffffffffffffffff90921691309162001e549062005738565b62001e629392919062005f89565b604051809103905ff08015801562001e7c573d5f803e3d5ffd5b5090508160835f8c67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360010160149054906101000a900467ffffffffffffffff168160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360020154816002015f8067ffffffffffffffff1681526020019081526020015f20819055508b63ffffffff168160070160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162002153949392919063ffffffff94909416845273ffffffffffffffffffffffffffffffffffffffff928316602085015267ffffffffffffffff91909116604084015216606082015260800190565b60405180910390a26040517f7125702200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690637125702290620021b9908d908d9088908e908e908e9060040162005fcc565b5f604051808303815f87803b158015620021d1575f80fd5b505af1158015620021e4573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f9081526081602052604090206060906200221d90878787878762004a19565b979650505050505050565b606f5460ff161562002266576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020908152604080832060845467ffffffffffffffff8a811686526003830190945291909320600101544292620022ca92780100000000000000000000000000000000000000000000000090048116911662005f1f565b67ffffffffffffffff1611156200230d576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86200231c88886200603b565b67ffffffffffffffff1611156200235f576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62002371818989898989898962004052565b6200237d818762004be0565b60855467ffffffffffffffff165f03620024c3576006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562002429576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200246f62002c27565b6040518263ffffffff1660e01b81526004016200248e91815260200190565b5f604051808303815f87803b158015620024a6575f80fd5b505af1158015620024b9573d5f803e3d5ffd5b50505050620025c5565b620024ce8162004de7565b600681018054700100000000000000000000000000000000900467ffffffffffffffff1690601062002500836200605f565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154700100000000000000000000000000000000900487165f90815260048a0190935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b6040805167ffffffffffffffff8816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff161562002663576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002689818989898989898962003b73565b67ffffffffffffffff87165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620026eb6200481c565b505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801562002783573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620027a991906200607e565b6084549091505f90620027d59067ffffffffffffffff680100000000000000008204811691166200603b565b67ffffffffffffffff169050805f03620027f1575f9250505090565b620027fd8183620060c3565b9250505090565b606f545f9060ff161562002844576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526082602052604081205463ffffffff169081900362002894576040517f71653c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8367ffffffffffffffff165f03620028d8576040517f2590ccf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200290b90849067ffffffffffffffff1662005f1f565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560068301541690505f62002941878362005f1f565b60068401805467ffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b019091529290932090518155915160019290920180549151841668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169290931691909117179055905062002a058362004de7565b60405167ffffffffffffffff8216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002a808162003b67565b606f5460ff1662002ad55760855467ffffffffffffffff9081169083161062002ad5576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200162001838565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002b698162003b67565b620151808267ffffffffffffffff16111562002bb1576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c289060200162001838565b6080545f9063ffffffff1680820362002c4157505f919050565b5f8167ffffffffffffffff81111562002c5e5762002c5e62005a73565b60405190808252806020026020018201604052801562002c88578160200160208202803683370190505b5090505f5b8281101562002cf85760815f62002ca6836001620060d9565b63ffffffff1663ffffffff1681526020019081526020015f206005015482828151811062002cd85762002cd8620060ef565b60209081029190910101528062002cef816200611c565b91505062002c8d565b505f60205b8360011462002f51575f62002d1460028662006156565b62002d21600287620060c3565b62002d2d9190620060d9565b90505f8167ffffffffffffffff81111562002d4c5762002d4c62005a73565b60405190808252806020026020018201604052801562002d76578160200160208202803683370190505b5090505f5b8281101562002efd5762002d916001846200616c565b8114801562002dac575062002da860028862006156565b6001145b1562002e34578562002dc082600262005f4a565b8151811062002dd35762002dd3620060ef565b60200260200101518560405160200162002df7929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002e225762002e22620060ef565b60200260200101818152505062002ee8565b8562002e4282600262005f4a565b8151811062002e555762002e55620060ef565b60200260200101518682600262002e6d919062005f4a565b62002e7a906001620060d9565b8151811062002e8d5762002e8d620060ef565b602002602001015160405160200162002eb0929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002edb5762002edb620060ef565b6020026020010181815250505b8062002ef4816200611c565b91505062002d7b565b50809450819550838460405160200162002f21929190918252602082015260400190565b604051602081830303815290604052805190602001209350828062002f469062006182565b935050505062002cfd565b5f835f8151811062002f675762002f67620060ef565b602002602001015190505f5b8281101562003005576040805160208101849052908101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002ffc906200611c565b91505062002f73565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac6200303b8162003b67565b63ffffffff841615806200305a5750607e5463ffffffff908116908516115b1562003092576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f9081526082602052604081205463ffffffff1690819003620030f8576040517f74a086a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8181165f9081526081602052604090206007810154909187166801000000000000000090910467ffffffffffffffff160362003165576040517f4f61d51900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff1615159003620031de576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101546007830154700100000000000000000000000000000000900460ff9081167c010000000000000000000000000000000000000000000000000000000090920416146200325b576040517fb541abe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001808201805491840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9094169384178255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027fffffffff000000000000000000000000000000000000000000000000000000009092169092171790556007820180546801000000000000000063ffffffff8a16027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555f62003343846200124d565b6007840180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831617905582546040517f4f1ef28600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8b811692634f1ef28692620033d79216908b908b90600401620061b9565b5f604051808303815f87803b158015620033ef575f80fd5b505af115801562003402573d5f803e3d5ffd5b50506040805163ffffffff8c8116825267ffffffffffffffff86166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb620034898162003b67565b683635c9adc5dea00000821180620034a45750633b9aca0082105b15620034dc576040517f8586952500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b29060200162001838565b5f828152603460205260409020600101546200352e8162003b67565b6200174283836200495f565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f4620035668162003b67565b608780547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517fdbc1697600000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163dbc16976916004808301925f92919082900301818387803b15801562003620575f80fd5b505af115801562003633573d5f803e3d5ffd5b505050506200364162004ef7565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e620036708162003b67565b67ffffffffffffffff84165f9081526083602052604090205463ffffffff1615620036c7576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87165f9081526082602052604090205463ffffffff16156200372a576040517fd409b93000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200373b88888888875f62004f86565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f590620037848162003b67565b607e80545f919082906200379e9063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018767ffffffffffffffff1681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b528989898989896040516200398b9695949392919062006222565b60405180910390a25050505050505050565b5f54610100900460ff1662001956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000de8565b620019dc8282620048a3565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60855467ffffffffffffffff8281165f9081526004850160205260408120549092429262003abe92918116911662005f1f565b67ffffffffffffffff1611159392505050565b60068101545f90700100000000000000000000000000000000900467ffffffffffffffff161562003b445750600681015467ffffffffffffffff70010000000000000000000000000000000090910481165f90815260049092016020526040909120546801000000000000000090041690565b506006015468010000000000000000900467ffffffffffffffff1690565b919050565b62003641813362005209565b60078801545f9067ffffffffffffffff908116908716101562003bc2576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88161562003ca957600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908916111562003c34576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff8088165f90815260048a016020526040902060028101548154909288811668010000000000000000909204161462003ca2576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062003d56565b5067ffffffffffffffff85165f9081526002890160205260409020548062003cfd576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff680100000000000000009091048116908716111562003d56576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908816118062003d9f57508767ffffffffffffffff168767ffffffffffffffff1611155b8062003dd95750600689015467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690881611155b1562003e11576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781165f90815260048b01602052604090205468010000000000000000900481169086161462003e76576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62003e878a888888868962004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ebd919062006287565b602060405180830381855afa15801562003ed9573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003efe91906200607e565b62003f0a919062006156565b60018c01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a9162003f7491889190600401620062a4565b602060405180830381865afa15801562003f90573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fb69190620062e0565b62003fed576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff89165f90815260048c01602052604090206002015485900362004045576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b5f806200405f8a62003ad1565b60078b015490915067ffffffffffffffff9081169089161015620040af576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff891615620041985760068a015467ffffffffffffffff7001000000000000000000000000000000009091048116908a16111562004121576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808a165f90815260048c01602052604090206002810154815490945090918a811668010000000000000000909204161462004191576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506200423c565b67ffffffffffffffff88165f90815260028b016020526040902054915081620041ed576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168867ffffffffffffffff1611156200423c576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff16116200428a576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200429b8b8a8a8a878b62004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620042d1919062006287565b602060405180830381855afa158015620042ed573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200431291906200607e565b6200431e919062006156565b60018d01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a916200438891899190600401620062a4565b602060405180830381865afa158015620043a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043ca9190620062e0565b62004401576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200440e848b6200603b565b905062004475878267ffffffffffffffff166200442a620026f6565b62004436919062005f4a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919062005272565b80608460088282829054906101000a900467ffffffffffffffff166200449c919062005f1f565b82546101009290920a67ffffffffffffffff818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000428416021790558e546040517f32c2d153000000000000000000000000000000000000000000000000000000008152918d166004830152602482018b905233604483015273ffffffffffffffffffffffffffffffffffffffff1691506332c2d153906064015f604051808303815f87803b15801562004572575f80fd5b505af115801562004585573d5f803e3d5ffd5b5050505050505050505050505050505050565b600682015467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216111580620045fb5750600682015467ffffffffffffffff7001000000000000000000000000000000009091048116908216115b1562004633576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8181165f818152600485016020908152604080832080546006890180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000092839004909816918202979097178755600280830154828752908a01909452919093209190915560018201546005870155835477ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000909302929092179092557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200473c62002c27565b6040518263ffffffff1660e01b81526004016200475b91815260200190565b5f604051808303815f87803b15801562004773575f80fd5b505af115801562004786573d5f803e3d5ffd5b5050855473ffffffffffffffffffffffffffffffffffffffff165f908152608260209081526040918290205460028701546001880154845167ffffffffffffffff898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562004882575f80fd5b505af115801562004895573d5f803e3d5ffd5b505050506200195662005301565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b67ffffffffffffffff8086165f818152600389016020526040808220549388168252902054606092911580159062004a4f575081155b1562004a87576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8062004abf576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62004aca8462005394565b62004b01576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b885460018a01546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b821660748401527401000000000000000000000000000000000000000094859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f62004bec8362003ad1565b9050815f8062004bfd84846200603b565b60855467ffffffffffffffff91821692505f9162004c299168010000000000000000900416426200616c565b90505b8467ffffffffffffffff168467ffffffffffffffff161462004cbc5767ffffffffffffffff8085165f9081526003890160205260409020600181015490911682101562004c9657600181015468010000000000000000900467ffffffffffffffff16945062004cb5565b62004ca286866200603b565b67ffffffffffffffff1693505062004cbc565b5062004c2c565b5f62004cc984846200616c565b90508381101562004d2757808403600c811162004ce7578062004cea565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a608654028162004d1c5762004d1c62006096565b046086555062004d9e565b838103600c811162004d3a578062004d3d565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004d765762004d7662006096565b04905080608654670de0b6b3a7640000028162004d975762004d9762006096565b0460865550505b683635c9adc5dea00000608654111562004dc557683635c9adc5dea0000060865562004ddd565b633b9aca00608654101562004ddd57633b9aca006086555b5050505050505050565b600681015467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116700100000000000000000000000000000000909204161115620036415760068101545f9062004e6a907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600162005f1f565b905062004e78828262003a8b565b15620019dc5760068201545f9060029062004eb3908490700100000000000000000000000000000000900467ffffffffffffffff166200603b565b62004ebf919062006301565b62004ecb908362005f1f565b905062004ed9838262003a8b565b1562004eeb5762001742838262004598565b62001742838362004598565b606f5460ff1662004f34576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b608080545f918291829062004fa19063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858260010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555086826001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084825f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620051f695949392919067ffffffffffffffff958616815273ffffffffffffffffffffffffffffffffffffffff949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc576040517fec2b7c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052620017429084906200541b565b606f5460ff16156200533f576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff0000000167ffffffffffffffff8316108015620053cc575067ffffffff00000001604083901c67ffffffffffffffff16105b8015620053ee575067ffffffff00000001608083901c67ffffffffffffffff16105b801562005406575067ffffffff0000000160c083901c105b156200541457506001919050565b505f919050565b5f6200547e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200552d9092919063ffffffff16565b8051909150156200174257808060200190518101906200549f9190620062e0565b62001742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000de8565b60606200553d84845f8562005545565b949350505050565b606082471015620055d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000de8565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405162005603919062006287565b5f6040518083038185875af1925050503d805f81146200563f576040519150601f19603f3d011682016040523d82523d5f602084013e62005644565b606091505b50915091506200221d8783838760608315620056eb5782515f03620056e35773ffffffffffffffffffffffffffffffffffffffff85163b620056e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000de8565b50816200553d565b6200553d8383815115620057025781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de8919062005ce7565b610a5e806200632b83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462003641575f80fd5b803567ffffffffffffffff8116811462003b62575f80fd5b5f805f805f805f805f806101408b8d0312156200579b575f80fd5b8a35620057a88162005746565b9950620057b860208c0162005768565b9850620057c860408c0162005768565b975060608b0135620057da8162005746565b965060808b0135620057ec8162005746565b955060a08b0135620057fe8162005746565b945060c08b0135620058108162005746565b935060e08b0135620058228162005746565b9250620058336101008c0162005768565b9150620058446101208c0162005768565b90509295989b9194979a5092959850565b803563ffffffff8116811462003b62575f80fd5b5f80604083850312156200587b575f80fd5b620058868362005855565b9150620058966020840162005768565b90509250929050565b5f60208284031215620058b0575f80fd5b620012448262005855565b80610300810183101562001247575f80fd5b5f805f805f805f806103e0898b031215620058e6575f80fd5b620058f18962005855565b97506200590160208a0162005768565b96506200591160408a0162005768565b95506200592160608a0162005768565b94506200593160808a0162005768565b935060a0890135925060c08901359150620059508a60e08b01620058bb565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562005978575f80fd5b620059838962005855565b97506200599360208a0162005768565b9650620059a360408a0162005768565b9550620059b360608a0162005768565b94506080890135935060a0890135925060c0890135620059d38162005746565b9150620059508a60e08b01620058bb565b5f60208284031215620059f5575f80fd5b813561ffff8116811462005a07575f80fd5b9392505050565b5f6020828403121562005a1f575f80fd5b5035919050565b5f806040838503121562005a38575f80fd5b82359150602083013562005a4c8162005746565b809150509250929050565b5f6020828403121562005a68575f80fd5b620012448262005768565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011262005ab0575f80fd5b813567ffffffffffffffff8082111562005ace5762005ace62005a73565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562005b175762005b1762005a73565b8160405283815286602085880101111562005b30575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562005b66575f80fd5b62005b718862005855565b965062005b816020890162005768565b9550604088013562005b938162005746565b9450606088013562005ba58162005746565b9350608088013562005bb78162005746565b925060a088013567ffffffffffffffff8082111562005bd4575f80fd5b62005be28b838c0162005aa0565b935060c08a013591508082111562005bf8575f80fd5b5062005c078a828b0162005aa0565b91505092959891949750929550565b5f805f805f8060c0878903121562005c2c575f80fd5b62005c378762005855565b955062005c476020880162005768565b945062005c576040880162005768565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562005c9457818101518382015260200162005c7a565b50505f910152565b5f815180845262005cb581602086016020860162005c78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f62001244602083018462005c9c565b5f806040838503121562005d0d575f80fd5b62005d188362005768565b946020939093013593505050565b5f805f806060858703121562005d3a575f80fd5b843562005d478162005746565b935062005d576020860162005855565b9250604085013567ffffffffffffffff8082111562005d74575f80fd5b818701915087601f83011262005d88575f80fd5b81358181111562005d97575f80fd5b88602082850101111562005da9575f80fd5b95989497505060200194505050565b5f6020828403121562005dc9575f80fd5b813562005a078162005746565b803560ff8116811462003b62575f80fd5b5f805f805f8060c0878903121562005dfd575f80fd5b863562005e0a8162005746565b9550602087013562005e1c8162005746565b945062005e2c6040880162005768565b935062005e3c6060880162005768565b92506080870135915062005e5360a0880162005dd6565b90509295509295509295565b5f805f805f8060c0878903121562005e75575f80fd5b863562005e828162005746565b9550602087013562005e948162005746565b945062005ea46040880162005768565b935062005eb46060880162005dd6565b92506080870135915060a087013567ffffffffffffffff81111562005ed7575f80fd5b62005ee589828a0162005aa0565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff81811683821601908082111562005f435762005f4362005ef2565b5092915050565b808202811582820484141762001247576200124762005ef2565b5f63ffffffff80831681810362005f7f5762005f7f62005ef2565b6001019392505050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005fc3606083018462005c9c565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200601a60c083018562005c9c565b82810360a08401526200602e818562005c9c565b9998505050505050505050565b67ffffffffffffffff82811682821603908082111562005f435762005f4362005ef2565b5f67ffffffffffffffff80831681810362005f7f5762005f7f62005ef2565b5f602082840312156200608f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82620060d457620060d462006096565b500490565b8082018082111562001247576200124762005ef2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200614f576200614f62005ef2565b5060010190565b5f8262006167576200616762006096565b500690565b8181038181111562001247576200124762005ef2565b5f8162006193576200619362005ef2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525067ffffffffffffffff8616604083015260ff8516606083015283608083015260c060a08301526200627b60c083018462005c9c565b98975050505050505050565b5f82516200629a81846020870162005c78565b9190910192915050565b6103208101610300808584378201835f5b6001811015620062d6578151835260209283019290910190600101620062b5565b5050509392505050565b5f60208284031215620062f1575f80fd5b8151801515811462005a07575f80fd5b5f67ffffffffffffffff808416806200631e576200631e62006096565b9216919091049291505056fe60a060405260405162000a5e38038062000a5e833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f8051602062000a3e833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f8051602062000a3e83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b6080516105ba620004845f395f601001526105ba5ff3fe608060405261000c61000e565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633036100a7575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef286000000000000000000000000000000000000000000000000000000001461009f5761009d6100ab565b565b61009d6100bb565b61009d5b61009d6100b66100e9565b61012d565b5f806100ca3660048184610410565b8101906100d79190610464565b915091506100e5828261014b565b5050565b5f6101287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b365f80375f80365f845af43d5f803e808015610147573d5ff35b3d5ffd5b610154826101b2565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101aa576101a58282610285565b505050565b6100e5610304565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361021f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516102ae9190610558565b5f60405180830381855af49150503d805f81146102e6576040519150601f19603f3d011682016040523d82523d5f602084013e6102eb565b606091505b50915091506102fb85838361033c565b95945050505050565b341561009d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103515761034c826103ce565b6103c7565b8151158015610375575073ffffffffffffffffffffffffffffffffffffffff84163b155b156103c4576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610216565b50805b9392505050565b8051156103de5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808585111561041e575f80fd5b8386111561042a575f80fd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610475575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610498575f80fd5b9150602083013567ffffffffffffffff808211156104b4575f80fd5b818501915085601f8301126104c7575f80fd5b8135818111156104d9576104d9610437565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051f5761051f610437565b81604052828152886020848701011115610537575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610577576020818601810151858301520161055d565b505f92019182525091905056fea26469706673582212200ca61bd1e45d482203caba1d216b11bb6992f1ce0f6427bfe86e65b2f53457a264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220a0a1c440ed85d9f9eeda617b6048e00cf12863c4f97b47eb0b40c67dec4452d164736f6c63430008140033", + "bytecode": "0x60e060405234801562000010575f80fd5b5060405162006fae38038062006fae83398101604081905262000033916200013c565b6001600160a01b0380841660805280831660c052811660a0528282826200005962000065565b5050505050506200018d565b5f54610100900460ff1615620000d15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116101562000122575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811462000139575f80fd5b50565b5f805f606084860312156200014f575f80fd5b83516200015c8162000124565b60208501519093506200016f8162000124565b6040850151909250620001828162000124565b809150509250925092565b60805160a05160c051616dbe620001f05f395f8181610b8a0152818161273d015261444d01525f818161090f015281816135c5015261481e01525f8181610add01528181611358015281816115780152818161242b01526146f80152616dbe5ff3fe608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000b84578063f34eb8eb1462000bac578063f4e926751462000bc3578063f9c4c2ae1462000bd4575f80fd5b8063dbc169761462000b42578063dde0ff771462000b4c578063e0bfd3d21462000b6d575f80fd5b8063d02103ca11620000eb578063d02103ca1462000ad7578063d5073f6f1462000aff578063d547741f1462000b16578063d939b3151462000b2d575f80fd5b8063c1acbc341462000a6f578063c4c928c21462000a98578063ceee281d1462000aaf575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d9914620008ff578063a3c573eb1462000909578063afd23cbe1462000957578063b99d0ad7146200098e575f80fd5b80639c9f3dfe14620008c9578063a066215c14620008e0578063a217fddf14620008f7575f80fd5b806391d1485411620001bb57806391d14854146200086057806399f5634e14620008a85780639a908e7314620008b2575f80fd5b8063841b24d7146200080157806387c20c0114620008325780638bd4f0711462000849575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000785578063727885e9146200079c5780637975fcfe14620007b35780637fb6e76a14620007d9575f80fd5b806355a71ee0146200062957806360469169146200066d57806365c0504d1462000677575f80fd5b806336568abe116200029757806336568abe14620005f2578063394218e91462000609578063477fa2701462000620575f80fd5b806325280169146200050b5780632f2ff15d14620005c657806330c27dde14620005dd575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae146200048f5780631816b7e514620004b65780632072f6c514620004cd578063248a9ca314620004d7575f80fd5b80631489ed10146200045357806315064c96146200046a5780631608859c1462000478575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040457806311f6b287146200042557806312b86e19146200043c575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003dc575b5f80fd5b620003a7620003a136600462005780565b62000d3e565b005b608454620003be9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b620003f3620003ed36600462005869565b62001224565b6040519015158152602001620003d3565b608554620003be9068010000000000000000900467ffffffffffffffff1681565b620003be620004363660046200589f565b6200124d565b620003a76200044d366004620058cd565b6200126c565b620003a7620004643660046200595f565b6200148c565b606f54620003f39060ff1681565b620003a76200048936600462005869565b6200166b565b607e54620004a09063ffffffff1681565b60405163ffffffff9091168152602001620003d3565b620003a7620004c7366004620059e4565b62001747565b620003a762001844565b620004fc620004e836600462005a0e565b5f9081526034602052604090206001015490565b604051908152602001620003d3565b620005916200051c36600462005869565b60408051606080820183525f808352602080840182905292840181905263ffffffff9590951685526081825282852067ffffffffffffffff9485168652600301825293829020825194850183528054855260010154808416918501919091526801000000000000000090049091169082015290565b604080518251815260208084015167ffffffffffffffff908116918301919091529282015190921690820152606001620003d3565b620003a7620005d736600462005a26565b62001958565b608754620003be9067ffffffffffffffff1681565b620003a76200060336600462005a26565b62001980565b620003a76200061a36600462005a57565b620019e0565b608654620004fc565b620004fc6200063a36600462005869565b63ffffffff82165f90815260816020908152604080832067ffffffffffffffff8516845260020190915290205492915050565b620004fc62001afb565b6200072d620006883660046200589f565b607f6020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff918216929182169167ffffffffffffffff740100000000000000000000000000000000000000008204169160ff7c010000000000000000000000000000000000000000000000000000000083048116927d0100000000000000000000000000000000000000000000000000000000009004169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015267ffffffffffffffff9093169385019390935260ff166060840152901515608083015260a082015260c001620003d3565b620003a7620007963660046200589f565b62001b12565b620003a7620007ad36600462005b4f565b62001c8d565b620007ca620007c436600462005c16565b620021f6565b604051620003d3919062005ce7565b620004a0620007ea36600462005a57565b60836020525f908152604090205463ffffffff1681565b608454620003be907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b620003a7620008433660046200595f565b62002228565b620003a76200085a366004620058cd565b62002625565b620003f36200087136600462005a26565b5f91825260346020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b620004fc620026f6565b620003be620008c336600462005cfb565b62002804565b620003a7620008da36600462005a57565b62002a54565b620003a7620008f136600462005a57565b62002b3d565b620004fc5f81565b620004fc62002c27565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620003d3565b6085546200097a90700100000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001620003d3565b62000a296200099f36600462005869565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff9690961681526081865283812067ffffffffffffffff958616825260040186528390208351918201845280548086168352680100000000000000009004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d391905f60808201905067ffffffffffffffff80845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003be90700100000000000000000000000000000000900467ffffffffffffffff1681565b620003a762000aa936600462005d26565b6200300f565b620004a062000ac036600462005db8565b60826020525f908152604090205463ffffffff1681565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000b1036600462005a0e565b6200345d565b620003a762000b2736600462005a26565b62003512565b608554620003be9067ffffffffffffffff1681565b620003a76200353a565b608454620003be9068010000000000000000900467ffffffffffffffff1681565b620003a762000b7e36600462005de7565b62003644565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000bbd36600462005e5f565b62003758565b608054620004a09063ffffffff1681565b62000cb062000be53660046200589f565b60816020525f90815260409020805460018201546005830154600684015460079094015473ffffffffffffffffffffffffffffffffffffffff80851695740100000000000000000000000000000000000000009586900467ffffffffffffffff908116969286169592909204821693928282169268010000000000000000808404821693700100000000000000000000000000000000808204841694780100000000000000000000000000000000000000000000000090920484169380831693830416910460ff168c565b6040805173ffffffffffffffffffffffffffffffffffffffff9d8e16815267ffffffffffffffff9c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d3565b5f54600290610100900460ff1615801562000d5f57505f5460ff8083169116105b62000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117179055608580546084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8e8116919091029190911790915567016345785d8a00006086558c167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116176907080000000000000000177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff167103ea0000000000000000000000000000000017905562000efa6200399d565b62000f267f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003a35565b62000f325f8862003a35565b62000f5e7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003a35565b62000f8a7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003a35565b62000fb67f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003a35565b62000fe27fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003a35565b6200100e7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003a35565b6200103a7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003a35565b620010667fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003a35565b620010b27f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f062003a41565b620010de7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003a35565b6200110a7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003a35565b620011567f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff28595162003a41565b620011827f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003a35565b620011ae7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003a35565b620011ba5f3362003a35565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062001244908362003a8b565b90505b92915050565b63ffffffff81165f908152608160205260408120620012479062003ad1565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012988162003b67565b63ffffffff89165f908152608160205260409020620012be818a8a8a8a8a8a8a62003b73565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562001356576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200139c62002c27565b6040518263ffffffff1660e01b8152600401620013bb91815260200190565b5f604051808303815f87803b158015620013d3575f80fd5b505af1158015620013e6573d5f803e3d5ffd5b50506084805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a8000000000000000000000000000000000000000000000000017905550506040805167ffffffffffffffff881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620014b88162003b67565b63ffffffff89165f908152608160205260409020620014de818a8a8a8a8a8a8a62004052565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8a81169182029290921783555f90815260028401602052604090208790556005830188905590547001000000000000000000000000000000009004161562001576576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d620015bc62002c27565b6040518263ffffffff1660e01b8152600401620015db91815260200190565b5f604051808303815f87803b158015620015f3575f80fd5b505af115801562001606573d5f803e3d5ffd5b50506040805167ffffffffffffffff8b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200173657606f5460ff1615620016f3576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620016ff818362003a8b565b62001736576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001742818362004598565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db1620017738162003b67565b6103e88261ffff1610806200178d57506103ff8261ffff16115b15620017c5576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200194c57608454700100000000000000000000000000000000900467ffffffffffffffff161580620018e257506084544290620018d69062093a8090700100000000000000000000000000000000900467ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b806200191457506087544290620019089062093a809067ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b156200194c576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019566200481c565b565b5f82815260346020526040902060010154620019748162003b67565b620017428383620048a3565b73ffffffffffffffffffffffffffffffffffffffff81163314620019d0576040517f5a568e6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019dc82826200495f565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001a0c8162003b67565b606f5460ff1662001a7d5760845467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161062001a7d576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200162001838565b5f608654606462001b0d919062005f4a565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001b3e8162003b67565b63ffffffff8216158062001b5d5750607e5463ffffffff908116908316115b1562001b95576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff82165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001c0e576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000017905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001cb98162003b67565b63ffffffff8816158062001cd85750607e5463ffffffff908116908916115b1562001d10576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001d89576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88165f9081526083602052604090205463ffffffff161562001de0576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608080545f9190829062001dfa9063ffffffff1662005f64565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f808252602082019283905293945073ffffffffffffffffffffffffffffffffffffffff90921691309162001e549062005738565b62001e629392919062005f89565b604051809103905ff08015801562001e7c573d5f803e3d5ffd5b5090508160835f8c67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360010160149054906101000a900467ffffffffffffffff168160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360020154816002015f8067ffffffffffffffff1681526020019081526020015f20819055508b63ffffffff168160070160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162002153949392919063ffffffff94909416845273ffffffffffffffffffffffffffffffffffffffff928316602085015267ffffffffffffffff91909116604084015216606082015260800190565b60405180910390a26040517f7125702200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690637125702290620021b9908d908d9088908e908e908e9060040162005fcc565b5f604051808303815f87803b158015620021d1575f80fd5b505af1158015620021e4573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f9081526081602052604090206060906200221d90878787878762004a19565b979650505050505050565b606f5460ff161562002266576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020908152604080832060845467ffffffffffffffff8a811686526003830190945291909320600101544292620022ca92780100000000000000000000000000000000000000000000000090048116911662005f1f565b67ffffffffffffffff1611156200230d576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86200231c88886200603b565b67ffffffffffffffff1611156200235f576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62002371818989898989898962004052565b6200237d818762004be0565b60855467ffffffffffffffff165f03620024c3576006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562002429576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200246f62002c27565b6040518263ffffffff1660e01b81526004016200248e91815260200190565b5f604051808303815f87803b158015620024a6575f80fd5b505af1158015620024b9573d5f803e3d5ffd5b50505050620025c5565b620024ce8162004de7565b600681018054700100000000000000000000000000000000900467ffffffffffffffff1690601062002500836200605f565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154700100000000000000000000000000000000900487165f90815260048a0190935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b6040805167ffffffffffffffff8816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff161562002663576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002689818989898989898962003b73565b67ffffffffffffffff87165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620026eb6200481c565b505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801562002783573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620027a991906200607e565b6084549091505f90620027d59067ffffffffffffffff680100000000000000008204811691166200603b565b67ffffffffffffffff169050805f03620027f1575f9250505090565b620027fd8183620060c3565b9250505090565b606f545f9060ff161562002844576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526082602052604081205463ffffffff169081900362002894576040517f71653c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8367ffffffffffffffff165f03620028d8576040517f2590ccf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200290b90849067ffffffffffffffff1662005f1f565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560068301541690505f62002941878362005f1f565b60068401805467ffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b019091529290932090518155915160019290920180549151841668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169290931691909117179055905062002a058362004de7565b60405167ffffffffffffffff8216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002a808162003b67565b606f5460ff1662002ad55760855467ffffffffffffffff9081169083161062002ad5576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200162001838565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002b698162003b67565b620151808267ffffffffffffffff16111562002bb1576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c289060200162001838565b6080545f9063ffffffff1680820362002c4157505f919050565b5f8167ffffffffffffffff81111562002c5e5762002c5e62005a73565b60405190808252806020026020018201604052801562002c88578160200160208202803683370190505b5090505f5b8281101562002cf85760815f62002ca6836001620060d9565b63ffffffff1663ffffffff1681526020019081526020015f206005015482828151811062002cd85762002cd8620060ef565b60209081029190910101528062002cef816200611c565b91505062002c8d565b505f60205b8360011462002f51575f62002d1460028662006156565b62002d21600287620060c3565b62002d2d9190620060d9565b90505f8167ffffffffffffffff81111562002d4c5762002d4c62005a73565b60405190808252806020026020018201604052801562002d76578160200160208202803683370190505b5090505f5b8281101562002efd5762002d916001846200616c565b8114801562002dac575062002da860028862006156565b6001145b1562002e34578562002dc082600262005f4a565b8151811062002dd35762002dd3620060ef565b60200260200101518560405160200162002df7929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002e225762002e22620060ef565b60200260200101818152505062002ee8565b8562002e4282600262005f4a565b8151811062002e555762002e55620060ef565b60200260200101518682600262002e6d919062005f4a565b62002e7a906001620060d9565b8151811062002e8d5762002e8d620060ef565b602002602001015160405160200162002eb0929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002edb5762002edb620060ef565b6020026020010181815250505b8062002ef4816200611c565b91505062002d7b565b50809450819550838460405160200162002f21929190918252602082015260400190565b604051602081830303815290604052805190602001209350828062002f469062006182565b935050505062002cfd565b5f835f8151811062002f675762002f67620060ef565b602002602001015190505f5b8281101562003005576040805160208101849052908101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002ffc906200611c565b91505062002f73565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac6200303b8162003b67565b63ffffffff841615806200305a5750607e5463ffffffff908116908516115b1562003092576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f9081526082602052604081205463ffffffff1690819003620030f8576040517f74a086a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8181165f9081526081602052604090206007810154909187166801000000000000000090910467ffffffffffffffff160362003165576040517f4f61d51900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff1615159003620031de576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101546007830154700100000000000000000000000000000000900460ff9081167c010000000000000000000000000000000000000000000000000000000090920416146200325b576040517fb541abe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001808201805491840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9094169384178255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027fffffffff000000000000000000000000000000000000000000000000000000009092169092171790556007820180546801000000000000000063ffffffff8a16027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555f62003343846200124d565b6007840180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831617905582546040517f4f1ef28600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8b811692634f1ef28692620033d79216908b908b90600401620061b9565b5f604051808303815f87803b158015620033ef575f80fd5b505af115801562003402573d5f803e3d5ffd5b50506040805163ffffffff8c8116825267ffffffffffffffff86166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb620034898162003b67565b683635c9adc5dea00000821180620034a45750633b9aca0082105b15620034dc576040517f8586952500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b29060200162001838565b5f828152603460205260409020600101546200352e8162003b67565b6200174283836200495f565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f4620035668162003b67565b608780547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517fdbc1697600000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163dbc16976916004808301925f92919082900301818387803b15801562003620575f80fd5b505af115801562003633573d5f803e3d5ffd5b505050506200364162004ef7565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e620036708162003b67565b67ffffffffffffffff84165f9081526083602052604090205463ffffffff1615620036c7576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87165f9081526082602052604090205463ffffffff16156200372a576040517fd409b93000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200373b88888888875f62004f86565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f590620037848162003b67565b607e80545f919082906200379e9063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018767ffffffffffffffff1681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b528989898989896040516200398b9695949392919062006222565b60405180910390a25050505050505050565b5f54610100900460ff1662001956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000de8565b620019dc8282620048a3565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60855467ffffffffffffffff8281165f9081526004850160205260408120549092429262003abe92918116911662005f1f565b67ffffffffffffffff1611159392505050565b60068101545f90700100000000000000000000000000000000900467ffffffffffffffff161562003b445750600681015467ffffffffffffffff70010000000000000000000000000000000090910481165f90815260049092016020526040909120546801000000000000000090041690565b506006015468010000000000000000900467ffffffffffffffff1690565b919050565b62003641813362005209565b60078801545f9067ffffffffffffffff908116908716101562003bc2576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88161562003ca957600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908916111562003c34576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff8088165f90815260048a016020526040902060028101548154909288811668010000000000000000909204161462003ca2576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062003d56565b5067ffffffffffffffff85165f9081526002890160205260409020548062003cfd576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff680100000000000000009091048116908716111562003d56576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908816118062003d9f57508767ffffffffffffffff168767ffffffffffffffff1611155b8062003dd95750600689015467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690881611155b1562003e11576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781165f90815260048b01602052604090205468010000000000000000900481169086161462003e76576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62003e878a888888868962004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ebd919062006287565b602060405180830381855afa15801562003ed9573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003efe91906200607e565b62003f0a919062006156565b60018c01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a9162003f7491889190600401620062a4565b602060405180830381865afa15801562003f90573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fb69190620062e0565b62003fed576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff89165f90815260048c01602052604090206002015485900362004045576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b5f806200405f8a62003ad1565b60078b015490915067ffffffffffffffff9081169089161015620040af576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff891615620041985760068a015467ffffffffffffffff7001000000000000000000000000000000009091048116908a16111562004121576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808a165f90815260048c01602052604090206002810154815490945090918a811668010000000000000000909204161462004191576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506200423c565b67ffffffffffffffff88165f90815260028b016020526040902054915081620041ed576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168867ffffffffffffffff1611156200423c576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff16116200428a576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200429b8b8a8a8a878b62004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620042d1919062006287565b602060405180830381855afa158015620042ed573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200431291906200607e565b6200431e919062006156565b60018d01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a916200438891899190600401620062a4565b602060405180830381865afa158015620043a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043ca9190620062e0565b62004401576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200440e848b6200603b565b905062004475878267ffffffffffffffff166200442a620026f6565b62004436919062005f4a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919062005272565b80608460088282829054906101000a900467ffffffffffffffff166200449c919062005f1f565b82546101009290920a67ffffffffffffffff818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000428416021790558e546040517f32c2d153000000000000000000000000000000000000000000000000000000008152918d166004830152602482018b905233604483015273ffffffffffffffffffffffffffffffffffffffff1691506332c2d153906064015f604051808303815f87803b15801562004572575f80fd5b505af115801562004585573d5f803e3d5ffd5b5050505050505050505050505050505050565b600682015467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216111580620045fb5750600682015467ffffffffffffffff7001000000000000000000000000000000009091048116908216115b1562004633576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8181165f818152600485016020908152604080832080546006890180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000092839004909816918202979097178755600280830154828752908a01909452919093209190915560018201546005870155835477ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000909302929092179092557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200473c62002c27565b6040518263ffffffff1660e01b81526004016200475b91815260200190565b5f604051808303815f87803b15801562004773575f80fd5b505af115801562004786573d5f803e3d5ffd5b5050855473ffffffffffffffffffffffffffffffffffffffff165f908152608260209081526040918290205460028701546001880154845167ffffffffffffffff898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562004882575f80fd5b505af115801562004895573d5f803e3d5ffd5b505050506200195662005301565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b67ffffffffffffffff8086165f818152600389016020526040808220549388168252902054606092911580159062004a4f575081155b1562004a87576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8062004abf576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62004aca8462005394565b62004b01576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b885460018a01546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b821660748401527401000000000000000000000000000000000000000094859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f62004bec8362003ad1565b9050815f8062004bfd84846200603b565b60855467ffffffffffffffff91821692505f9162004c299168010000000000000000900416426200616c565b90505b8467ffffffffffffffff168467ffffffffffffffff161462004cbc5767ffffffffffffffff8085165f9081526003890160205260409020600181015490911682101562004c9657600181015468010000000000000000900467ffffffffffffffff16945062004cb5565b62004ca286866200603b565b67ffffffffffffffff1693505062004cbc565b5062004c2c565b5f62004cc984846200616c565b90508381101562004d2757808403600c811162004ce7578062004cea565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a608654028162004d1c5762004d1c62006096565b046086555062004d9e565b838103600c811162004d3a578062004d3d565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004d765762004d7662006096565b04905080608654670de0b6b3a7640000028162004d975762004d9762006096565b0460865550505b683635c9adc5dea00000608654111562004dc557683635c9adc5dea0000060865562004ddd565b633b9aca00608654101562004ddd57633b9aca006086555b5050505050505050565b600681015467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116700100000000000000000000000000000000909204161115620036415760068101545f9062004e6a907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600162005f1f565b905062004e78828262003a8b565b15620019dc5760068201545f9060029062004eb3908490700100000000000000000000000000000000900467ffffffffffffffff166200603b565b62004ebf919062006301565b62004ecb908362005f1f565b905062004ed9838262003a8b565b1562004eeb5762001742838262004598565b62001742838362004598565b606f5460ff1662004f34576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b608080545f918291829062004fa19063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858260010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555086826001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084825f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620051f695949392919067ffffffffffffffff958616815273ffffffffffffffffffffffffffffffffffffffff949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc576040517fec2b7c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052620017429084906200541b565b606f5460ff16156200533f576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff0000000167ffffffffffffffff8316108015620053cc575067ffffffff00000001604083901c67ffffffffffffffff16105b8015620053ee575067ffffffff00000001608083901c67ffffffffffffffff16105b801562005406575067ffffffff0000000160c083901c105b156200541457506001919050565b505f919050565b5f6200547e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200552d9092919063ffffffff16565b8051909150156200174257808060200190518101906200549f9190620062e0565b62001742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000de8565b60606200553d84845f8562005545565b949350505050565b606082471015620055d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000de8565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405162005603919062006287565b5f6040518083038185875af1925050503d805f81146200563f576040519150601f19603f3d011682016040523d82523d5f602084013e62005644565b606091505b50915091506200221d8783838760608315620056eb5782515f03620056e35773ffffffffffffffffffffffffffffffffffffffff85163b620056e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000de8565b50816200553d565b6200553d8383815115620057025781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de8919062005ce7565b610a5e806200632b83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462003641575f80fd5b803567ffffffffffffffff8116811462003b62575f80fd5b5f805f805f805f805f806101408b8d0312156200579b575f80fd5b8a35620057a88162005746565b9950620057b860208c0162005768565b9850620057c860408c0162005768565b975060608b0135620057da8162005746565b965060808b0135620057ec8162005746565b955060a08b0135620057fe8162005746565b945060c08b0135620058108162005746565b935060e08b0135620058228162005746565b9250620058336101008c0162005768565b9150620058446101208c0162005768565b90509295989b9194979a5092959850565b803563ffffffff8116811462003b62575f80fd5b5f80604083850312156200587b575f80fd5b620058868362005855565b9150620058966020840162005768565b90509250929050565b5f60208284031215620058b0575f80fd5b620012448262005855565b80610300810183101562001247575f80fd5b5f805f805f805f806103e0898b031215620058e6575f80fd5b620058f18962005855565b97506200590160208a0162005768565b96506200591160408a0162005768565b95506200592160608a0162005768565b94506200593160808a0162005768565b935060a0890135925060c08901359150620059508a60e08b01620058bb565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562005978575f80fd5b620059838962005855565b97506200599360208a0162005768565b9650620059a360408a0162005768565b9550620059b360608a0162005768565b94506080890135935060a0890135925060c0890135620059d38162005746565b9150620059508a60e08b01620058bb565b5f60208284031215620059f5575f80fd5b813561ffff8116811462005a07575f80fd5b9392505050565b5f6020828403121562005a1f575f80fd5b5035919050565b5f806040838503121562005a38575f80fd5b82359150602083013562005a4c8162005746565b809150509250929050565b5f6020828403121562005a68575f80fd5b620012448262005768565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011262005ab0575f80fd5b813567ffffffffffffffff8082111562005ace5762005ace62005a73565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562005b175762005b1762005a73565b8160405283815286602085880101111562005b30575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562005b66575f80fd5b62005b718862005855565b965062005b816020890162005768565b9550604088013562005b938162005746565b9450606088013562005ba58162005746565b9350608088013562005bb78162005746565b925060a088013567ffffffffffffffff8082111562005bd4575f80fd5b62005be28b838c0162005aa0565b935060c08a013591508082111562005bf8575f80fd5b5062005c078a828b0162005aa0565b91505092959891949750929550565b5f805f805f8060c0878903121562005c2c575f80fd5b62005c378762005855565b955062005c476020880162005768565b945062005c576040880162005768565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562005c9457818101518382015260200162005c7a565b50505f910152565b5f815180845262005cb581602086016020860162005c78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f62001244602083018462005c9c565b5f806040838503121562005d0d575f80fd5b62005d188362005768565b946020939093013593505050565b5f805f806060858703121562005d3a575f80fd5b843562005d478162005746565b935062005d576020860162005855565b9250604085013567ffffffffffffffff8082111562005d74575f80fd5b818701915087601f83011262005d88575f80fd5b81358181111562005d97575f80fd5b88602082850101111562005da9575f80fd5b95989497505060200194505050565b5f6020828403121562005dc9575f80fd5b813562005a078162005746565b803560ff8116811462003b62575f80fd5b5f805f805f8060c0878903121562005dfd575f80fd5b863562005e0a8162005746565b9550602087013562005e1c8162005746565b945062005e2c6040880162005768565b935062005e3c6060880162005768565b92506080870135915062005e5360a0880162005dd6565b90509295509295509295565b5f805f805f8060c0878903121562005e75575f80fd5b863562005e828162005746565b9550602087013562005e948162005746565b945062005ea46040880162005768565b935062005eb46060880162005dd6565b92506080870135915060a087013567ffffffffffffffff81111562005ed7575f80fd5b62005ee589828a0162005aa0565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff81811683821601908082111562005f435762005f4362005ef2565b5092915050565b808202811582820484141762001247576200124762005ef2565b5f63ffffffff80831681810362005f7f5762005f7f62005ef2565b6001019392505050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005fc3606083018462005c9c565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200601a60c083018562005c9c565b82810360a08401526200602e818562005c9c565b9998505050505050505050565b67ffffffffffffffff82811682821603908082111562005f435762005f4362005ef2565b5f67ffffffffffffffff80831681810362005f7f5762005f7f62005ef2565b5f602082840312156200608f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82620060d457620060d462006096565b500490565b8082018082111562001247576200124762005ef2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200614f576200614f62005ef2565b5060010190565b5f8262006167576200616762006096565b500690565b8181038181111562001247576200124762005ef2565b5f8162006193576200619362005ef2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525067ffffffffffffffff8616604083015260ff8516606083015283608083015260c060a08301526200627b60c083018462005c9c565b98975050505050505050565b5f82516200629a81846020870162005c78565b9190910192915050565b6103208101610300808584378201835f5b6001811015620062d6578151835260209283019290910190600101620062b5565b5050509392505050565b5f60208284031215620062f1575f80fd5b8151801515811462005a07575f80fd5b5f67ffffffffffffffff808416806200631e576200631e62006096565b9216919091049291505056fe60a060405260405162000a5e38038062000a5e833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f8051602062000a3e833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f8051602062000a3e83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b6080516105ba620004845f395f601001526105ba5ff3fe608060405261000c61000e565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633036100a7575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef286000000000000000000000000000000000000000000000000000000001461009f5761009d6100ab565b565b61009d6100bb565b61009d5b61009d6100b66100e9565b61012d565b5f806100ca3660048184610410565b8101906100d79190610464565b915091506100e5828261014b565b5050565b5f6101287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b365f80375f80365f845af43d5f803e808015610147573d5ff35b3d5ffd5b610154826101b2565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101aa576101a58282610285565b505050565b6100e5610304565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361021f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516102ae9190610558565b5f60405180830381855af49150503d805f81146102e6576040519150601f19603f3d011682016040523d82523d5f602084013e6102eb565b606091505b50915091506102fb85838361033c565b95945050505050565b341561009d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103515761034c826103ce565b6103c7565b8151158015610375575073ffffffffffffffffffffffffffffffffffffffff84163b155b156103c4576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610216565b50805b9392505050565b8051156103de5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808585111561041e575f80fd5b8386111561042a575f80fd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610475575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610498575f80fd5b9150602083013567ffffffffffffffff808211156104b4575f80fd5b818501915085601f8301126104c7575f80fd5b8135818111156104d9576104d9610437565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051f5761051f610437565b81604052828152886020848701011115610537575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610577576020818601810151858301520161055d565b505f92019182525091905056fea26469706673582212200ca61bd1e45d482203caba1d216b11bb6992f1ce0f6427bfe86e65b2f53457a264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212201a2ae2d730801f81f42936329f636b8afe39749919cb9dab4748bf0eae19efe364736f6c63430008140033", + "deployedBytecode": "0x608060405234801562000010575f80fd5b50600436106200038c575f3560e01c8063841b24d711620001e3578063c1acbc341162000113578063dbc1697611620000ab578063e46761c41162000083578063e46761c41462000b84578063f34eb8eb1462000bac578063f4e926751462000bc3578063f9c4c2ae1462000bd4575f80fd5b8063dbc169761462000b42578063dde0ff771462000b4c578063e0bfd3d21462000b6d575f80fd5b8063d02103ca11620000eb578063d02103ca1462000ad7578063d5073f6f1462000aff578063d547741f1462000b16578063d939b3151462000b2d575f80fd5b8063c1acbc341462000a6f578063c4c928c21462000a98578063ceee281d1462000aaf575f80fd5b80639c9f3dfe1162000187578063a2967d99116200015f578063a2967d9914620008ff578063a3c573eb1462000909578063afd23cbe1462000957578063b99d0ad7146200098e575f80fd5b80639c9f3dfe14620008c9578063a066215c14620008e0578063a217fddf14620008f7575f80fd5b806391d1485411620001bb57806391d14854146200086057806399f5634e14620008a85780639a908e7314620008b2575f80fd5b8063841b24d7146200080157806387c20c0114620008325780638bd4f0711462000849575f80fd5b80632528016911620002bf57806355a71ee011620002635780637222020f116200023b5780637222020f1462000785578063727885e9146200079c5780637975fcfe14620007b35780637fb6e76a14620007d9575f80fd5b806355a71ee0146200062957806360469169146200066d57806365c0504d1462000677575f80fd5b806336568abe116200029757806336568abe14620005f2578063394218e91462000609578063477fa2701462000620575f80fd5b806325280169146200050b5780632f2ff15d14620005c657806330c27dde14620005dd575f80fd5b80631489ed1011620003335780631796a1ae116200030b5780631796a1ae146200048f5780631816b7e514620004b65780632072f6c514620004cd578063248a9ca314620004d7575f80fd5b80631489ed10146200045357806315064c96146200046a5780631608859c1462000478575f80fd5b80630a0d9fbe11620003675780630a0d9fbe146200040457806311f6b287146200042557806312b86e19146200043c575f80fd5b80630645af091462000390578063066ec01214620003a9578063080b311114620003dc575b5f80fd5b620003a7620003a136600462005780565b62000d3e565b005b608454620003be9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b620003f3620003ed36600462005869565b62001224565b6040519015158152602001620003d3565b608554620003be9068010000000000000000900467ffffffffffffffff1681565b620003be620004363660046200589f565b6200124d565b620003a76200044d366004620058cd565b6200126c565b620003a7620004643660046200595f565b6200148c565b606f54620003f39060ff1681565b620003a76200048936600462005869565b6200166b565b607e54620004a09063ffffffff1681565b60405163ffffffff9091168152602001620003d3565b620003a7620004c7366004620059e4565b62001747565b620003a762001844565b620004fc620004e836600462005a0e565b5f9081526034602052604090206001015490565b604051908152602001620003d3565b620005916200051c36600462005869565b60408051606080820183525f808352602080840182905292840181905263ffffffff9590951685526081825282852067ffffffffffffffff9485168652600301825293829020825194850183528054855260010154808416918501919091526801000000000000000090049091169082015290565b604080518251815260208084015167ffffffffffffffff908116918301919091529282015190921690820152606001620003d3565b620003a7620005d736600462005a26565b62001958565b608754620003be9067ffffffffffffffff1681565b620003a76200060336600462005a26565b62001980565b620003a76200061a36600462005a57565b620019e0565b608654620004fc565b620004fc6200063a36600462005869565b63ffffffff82165f90815260816020908152604080832067ffffffffffffffff8516845260020190915290205492915050565b620004fc62001afb565b6200072d620006883660046200589f565b607f6020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff918216929182169167ffffffffffffffff740100000000000000000000000000000000000000008204169160ff7c010000000000000000000000000000000000000000000000000000000083048116927d0100000000000000000000000000000000000000000000000000000000009004169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815296909516602087015267ffffffffffffffff9093169385019390935260ff166060840152901515608083015260a082015260c001620003d3565b620003a7620007963660046200589f565b62001b12565b620003a7620007ad36600462005b4f565b62001c8d565b620007ca620007c436600462005c16565b620021f6565b604051620003d3919062005ce7565b620004a0620007ea36600462005a57565b60836020525f908152604090205463ffffffff1681565b608454620003be907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b620003a7620008433660046200595f565b62002228565b620003a76200085a366004620058cd565b62002625565b620003f36200087136600462005a26565b5f91825260346020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b620004fc620026f6565b620003be620008c336600462005cfb565b62002804565b620003a7620008da36600462005a57565b62002a54565b620003a7620008f136600462005a57565b62002b3d565b620004fc5f81565b620004fc62002c27565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620003d3565b6085546200097a90700100000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001620003d3565b62000a296200099f36600462005869565b60408051608080820183525f8083526020808401829052838501829052606093840182905263ffffffff9690961681526081865283812067ffffffffffffffff958616825260040186528390208351918201845280548086168352680100000000000000009004909416948101949094526001830154918401919091526002909101549082015290565b604051620003d391905f60808201905067ffffffffffffffff80845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003be90700100000000000000000000000000000000900467ffffffffffffffff1681565b620003a762000aa936600462005d26565b6200300f565b620004a062000ac036600462005db8565b60826020525f908152604090205463ffffffff1681565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000b1036600462005a0e565b6200345d565b620003a762000b2736600462005a26565b62003512565b608554620003be9067ffffffffffffffff1681565b620003a76200353a565b608454620003be9068010000000000000000900467ffffffffffffffff1681565b620003a762000b7e36600462005de7565b62003644565b620009317f000000000000000000000000000000000000000000000000000000000000000081565b620003a762000bbd36600462005e5f565b62003758565b608054620004a09063ffffffff1681565b62000cb062000be53660046200589f565b60816020525f90815260409020805460018201546005830154600684015460079094015473ffffffffffffffffffffffffffffffffffffffff80851695740100000000000000000000000000000000000000009586900467ffffffffffffffff908116969286169592909204821693928282169268010000000000000000808404821693700100000000000000000000000000000000808204841694780100000000000000000000000000000000000000000000000090920484169380831693830416910460ff168c565b6040805173ffffffffffffffffffffffffffffffffffffffff9d8e16815267ffffffffffffffff9c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003d3565b5f54600290610100900460ff1615801562000d5f57505f5460ff8083169116105b62000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117179055608580546084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8e8116919091029190911790915567016345785d8a00006086558c167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116176907080000000000000000177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff167103ea0000000000000000000000000000000017905562000efa6200399d565b62000f267f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003a35565b62000f325f8862003a35565b62000f5e7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003a35565b62000f8a7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003a35565b62000fb67f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003a35565b62000fe27fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003a35565b6200100e7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003a35565b6200103a7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003a35565b620010667fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003a35565b620010b27f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f062003a41565b620010de7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003a35565b6200110a7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003a35565b620011567f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff28595162003a41565b620011827f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003a35565b620011ae7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003a35565b620011ba5f3362003a35565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff82165f90815260816020526040812062001244908362003a8b565b90505b92915050565b63ffffffff81165f908152608160205260408120620012479062003ad1565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012988162003b67565b63ffffffff89165f908152608160205260409020620012be818a8a8a8a8a8a8a62003b73565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562001356576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200139c62002c27565b6040518263ffffffff1660e01b8152600401620013bb91815260200190565b5f604051808303815f87803b158015620013d3575f80fd5b505af1158015620013e6573d5f803e3d5ffd5b50506084805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a8000000000000000000000000000000000000000000000000017905550506040805167ffffffffffffffff881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620014b88162003b67565b63ffffffff89165f908152608160205260409020620014de818a8a8a8a8a8a8a62004052565b6006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8a81169182029290921783555f90815260028401602052604090208790556005830188905590547001000000000000000000000000000000009004161562001576576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d620015bc62002c27565b6040518263ffffffff1660e01b8152600401620015db91815260200190565b5f604051808303815f87803b158015620015f3575f80fd5b505af115801562001606573d5f803e3d5ffd5b50506040805167ffffffffffffffff8b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff82165f9081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff166200173657606f5460ff1615620016f3576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620016ff818362003a8b565b62001736576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001742818362004598565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db1620017738162003b67565b6103e88261ffff1610806200178d57506103ff8261ffff16115b15620017c5576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b335f9081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200194c57608454700100000000000000000000000000000000900467ffffffffffffffff161580620018e257506084544290620018d69062093a8090700100000000000000000000000000000000900467ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b806200191457506087544290620019089062093a809067ffffffffffffffff1662005f1f565b67ffffffffffffffff16115b156200194c576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019566200481c565b565b5f82815260346020526040902060010154620019748162003b67565b620017428383620048a3565b73ffffffffffffffffffffffffffffffffffffffff81163314620019d0576040517f5a568e6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620019dc82826200495f565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001a0c8162003b67565b606f5460ff1662001a7d5760845467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161062001a7d576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6084805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200162001838565b5f608654606462001b0d919062005f4a565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd62001b3e8162003b67565b63ffffffff8216158062001b5d5750607e5463ffffffff908116908316115b1562001b95576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff82165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001c0e576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000017905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e44905f90a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd0862001cb98162003b67565b63ffffffff8816158062001cd85750607e5463ffffffff908116908916115b1562001d10576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff161515900362001d89576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88165f9081526083602052604090205463ffffffff161562001de0576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608080545f9190829062001dfa9063ffffffff1662005f64565b825463ffffffff8281166101009490940a93840293021916919091179091558254604080515f808252602082019283905293945073ffffffffffffffffffffffffffffffffffffffff90921691309162001e549062005738565b62001e629392919062005f89565b604051809103905ff08015801562001e7c573d5f803e3d5ffd5b5090508160835f8c67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508160825f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505f60815f8463ffffffff1663ffffffff1681526020019081526020015f20905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360010160149054906101000a900467ffffffffffffffff168160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a815f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508360020154816002015f8067ffffffffffffffff1681526020019081526020015f20819055508b63ffffffff168160070160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162002153949392919063ffffffff94909416845273ffffffffffffffffffffffffffffffffffffffff928316602085015267ffffffffffffffff91909116604084015216606082015260800190565b60405180910390a26040517f7125702200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690637125702290620021b9908d908d9088908e908e908e9060040162005fcc565b5f604051808303815f87803b158015620021d1575f80fd5b505af1158015620021e4573d5f803e3d5ffd5b50505050505050505050505050505050565b63ffffffff86165f9081526081602052604090206060906200221d90878787878762004a19565b979650505050505050565b606f5460ff161562002266576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020908152604080832060845467ffffffffffffffff8a811686526003830190945291909320600101544292620022ca92780100000000000000000000000000000000000000000000000090048116911662005f1f565b67ffffffffffffffff1611156200230d576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86200231c88886200603b565b67ffffffffffffffff1611156200235f576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62002371818989898989898962004052565b6200237d818762004be0565b60855467ffffffffffffffff165f03620024c3576006810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8981169182029290921783555f90815260028401602052604090208690556005830187905590547001000000000000000000000000000000009004161562002429576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200246f62002c27565b6040518263ffffffff1660e01b81526004016200248e91815260200190565b5f604051808303815f87803b158015620024a6575f80fd5b505af1158015620024b9573d5f803e3d5ffd5b50505050620025c5565b620024ce8162004de7565b600681018054700100000000000000000000000000000000900467ffffffffffffffff1690601062002500836200605f565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154700100000000000000000000000000000000900487165f90815260048a0190935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b6040805167ffffffffffffffff8816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff161562002663576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f90815260816020526040902062002689818989898989898962003b73565b67ffffffffffffffff87165f9081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1620026eb6200481c565b505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801562002783573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620027a991906200607e565b6084549091505f90620027d59067ffffffffffffffff680100000000000000008204811691166200603b565b67ffffffffffffffff169050805f03620027f1575f9250505090565b620027fd8183620060c3565b9250505090565b606f545f9060ff161562002844576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526082602052604081205463ffffffff169081900362002894576040517f71653c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8367ffffffffffffffff165f03620028d8576040517f2590ccf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81165f90815260816020526040812060848054919287926200290b90849067ffffffffffffffff1662005f1f565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560068301541690505f62002941878362005f1f565b60068401805467ffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217909255604080516060810182528a815242841660208083019182528886168385019081525f95865260038b019091529290932090518155915160019290920180549151841668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169290931691909117179055905062002a058362004de7565b60405167ffffffffffffffff8216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002a808162003b67565b606f5460ff1662002ad55760855467ffffffffffffffff9081169083161062002ad5576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200162001838565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002b698162003b67565b620151808267ffffffffffffffff16111562002bb1576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c289060200162001838565b6080545f9063ffffffff1680820362002c4157505f919050565b5f8167ffffffffffffffff81111562002c5e5762002c5e62005a73565b60405190808252806020026020018201604052801562002c88578160200160208202803683370190505b5090505f5b8281101562002cf85760815f62002ca6836001620060d9565b63ffffffff1663ffffffff1681526020019081526020015f206005015482828151811062002cd85762002cd8620060ef565b60209081029190910101528062002cef816200611c565b91505062002c8d565b505f60205b8360011462002f51575f62002d1460028662006156565b62002d21600287620060c3565b62002d2d9190620060d9565b90505f8167ffffffffffffffff81111562002d4c5762002d4c62005a73565b60405190808252806020026020018201604052801562002d76578160200160208202803683370190505b5090505f5b8281101562002efd5762002d916001846200616c565b8114801562002dac575062002da860028862006156565b6001145b1562002e34578562002dc082600262005f4a565b8151811062002dd35762002dd3620060ef565b60200260200101518560405160200162002df7929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002e225762002e22620060ef565b60200260200101818152505062002ee8565b8562002e4282600262005f4a565b8151811062002e555762002e55620060ef565b60200260200101518682600262002e6d919062005f4a565b62002e7a906001620060d9565b8151811062002e8d5762002e8d620060ef565b602002602001015160405160200162002eb0929190918252602082015260400190565b6040516020818303038152906040528051906020012082828151811062002edb5762002edb620060ef565b6020026020010181815250505b8062002ef4816200611c565b91505062002d7b565b50809450819550838460405160200162002f21929190918252602082015260400190565b604051602081830303815290604052805190602001209350828062002f469062006182565b935050505062002cfd565b5f835f8151811062002f675762002f67620060ef565b602002602001015190505f5b8281101562003005576040805160208101849052908101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018790529082018690529250606001604051602081830303815290604052805190602001209350808062002ffc906200611c565b91505062002f73565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac6200303b8162003b67565b63ffffffff841615806200305a5750607e5463ffffffff908116908516115b1562003092576040517f7512e5cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f9081526082602052604081205463ffffffff1690819003620030f8576040517f74a086a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8181165f9081526081602052604090206007810154909187166801000000000000000090910467ffffffffffffffff160362003165576040517f4f61d51900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152607f602052604090206001808201547d010000000000000000000000000000000000000000000000000000000000900460ff1615159003620031de576040517f3b8d3d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101546007830154700100000000000000000000000000000000900460ff9081167c010000000000000000000000000000000000000000000000000000000090920416146200325b576040517fb541abe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001808201805491840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff9094169384178255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027fffffffff000000000000000000000000000000000000000000000000000000009092169092171790556007820180546801000000000000000063ffffffff8a16027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555f62003343846200124d565b6007840180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831617905582546040517f4f1ef28600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8b811692634f1ef28692620033d79216908b908b90600401620061b9565b5f604051808303815f87803b158015620033ef575f80fd5b505af115801562003402573d5f803e3d5ffd5b50506040805163ffffffff8c8116825267ffffffffffffffff86166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb620034898162003b67565b683635c9adc5dea00000821180620034a45750633b9aca0082105b15620034dc576040517f8586952500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b29060200162001838565b5f828152603460205260409020600101546200352e8162003b67565b6200174283836200495f565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f4620035668162003b67565b608780547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604080517fdbc1697600000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163dbc16976916004808301925f92919082900301818387803b15801562003620575f80fd5b505af115801562003633573d5f803e3d5ffd5b505050506200364162004ef7565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e620036708162003b67565b67ffffffffffffffff84165f9081526083602052604090205463ffffffff1615620036c7576040517f6f91fc1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87165f9081526082602052604090205463ffffffff16156200372a576040517fd409b93000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200373b88888888875f62004f86565b5f8080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f590620037848162003b67565b607e80545f919082906200379e9063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018767ffffffffffffffff1681526020018660ff1681526020015f1515815260200185815250607f5f8363ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b528989898989896040516200398b9695949392919062006222565b60405180910390a25050505050505050565b5f54610100900460ff1662001956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000de8565b620019dc8282620048a3565b5f82815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60855467ffffffffffffffff8281165f9081526004850160205260408120549092429262003abe92918116911662005f1f565b67ffffffffffffffff1611159392505050565b60068101545f90700100000000000000000000000000000000900467ffffffffffffffff161562003b445750600681015467ffffffffffffffff70010000000000000000000000000000000090910481165f90815260049092016020526040909120546801000000000000000090041690565b506006015468010000000000000000900467ffffffffffffffff1690565b919050565b62003641813362005209565b60078801545f9067ffffffffffffffff908116908716101562003bc2576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff88161562003ca957600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908916111562003c34576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff8088165f90815260048a016020526040902060028101548154909288811668010000000000000000909204161462003ca2576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062003d56565b5067ffffffffffffffff85165f9081526002890160205260409020548062003cfd576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff680100000000000000009091048116908716111562003d56576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600689015467ffffffffffffffff7001000000000000000000000000000000009091048116908816118062003d9f57508767ffffffffffffffff168767ffffffffffffffff1611155b8062003dd95750600689015467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690881611155b1562003e11576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781165f90815260048b01602052604090205468010000000000000000900481169086161462003e76576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62003e878a888888868962004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405162003ebd919062006287565b602060405180830381855afa15801562003ed9573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019062003efe91906200607e565b62003f0a919062006156565b60018c01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a9162003f7491889190600401620062a4565b602060405180830381865afa15801562003f90573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fb69190620062e0565b62003fed576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff89165f90815260048c01602052604090206002015485900362004045576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b5f806200405f8a62003ad1565b60078b015490915067ffffffffffffffff9081169089161015620040af576040517fead1340b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff891615620041985760068a015467ffffffffffffffff7001000000000000000000000000000000009091048116908a16111562004121576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808a165f90815260048c01602052604090206002810154815490945090918a811668010000000000000000909204161462004191576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506200423c565b67ffffffffffffffff88165f90815260028b016020526040902054915081620041ed576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168867ffffffffffffffff1611156200423c576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff16116200428a576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200429b8b8a8a8a878b62004a19565b90505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620042d1919062006287565b602060405180830381855afa158015620042ed573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906200431291906200607e565b6200431e919062006156565b60018d01546040805160208101825283815290517f9121da8a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691639121da8a916200438891899190600401620062a4565b602060405180830381865afa158015620043a4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043ca9190620062e0565b62004401576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6200440e848b6200603b565b905062004475878267ffffffffffffffff166200442a620026f6565b62004436919062005f4a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919062005272565b80608460088282829054906101000a900467ffffffffffffffff166200449c919062005f1f565b82546101009290920a67ffffffffffffffff818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000428416021790558e546040517f32c2d153000000000000000000000000000000000000000000000000000000008152918d166004830152602482018b905233604483015273ffffffffffffffffffffffffffffffffffffffff1691506332c2d153906064015f604051808303815f87803b15801562004572575f80fd5b505af115801562004585573d5f803e3d5ffd5b5050505050505050505050505050505050565b600682015467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216111580620045fb5750600682015467ffffffffffffffff7001000000000000000000000000000000009091048116908216115b1562004633576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8181165f818152600485016020908152604080832080546006890180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000092839004909816918202979097178755600280830154828752908a01909452919093209190915560018201546005870155835477ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000909302929092179092557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166333d6247d6200473c62002c27565b6040518263ffffffff1660e01b81526004016200475b91815260200190565b5f604051808303815f87803b15801562004773575f80fd5b505af115801562004786573d5f803e3d5ffd5b5050855473ffffffffffffffffffffffffffffffffffffffff165f908152608260209081526040918290205460028701546001880154845167ffffffffffffffff898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562004882575f80fd5b505af115801562004895573d5f803e3d5ffd5b505050506200195662005301565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615620019dc575f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b67ffffffffffffffff8086165f818152600389016020526040808220549388168252902054606092911580159062004a4f575081155b1562004a87576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8062004abf576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62004aca8462005394565b62004b01576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b885460018a01546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b821660748401527401000000000000000000000000000000000000000094859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b5f62004bec8362003ad1565b9050815f8062004bfd84846200603b565b60855467ffffffffffffffff91821692505f9162004c299168010000000000000000900416426200616c565b90505b8467ffffffffffffffff168467ffffffffffffffff161462004cbc5767ffffffffffffffff8085165f9081526003890160205260409020600181015490911682101562004c9657600181015468010000000000000000900467ffffffffffffffff16945062004cb5565b62004ca286866200603b565b67ffffffffffffffff1693505062004cbc565b5062004c2c565b5f62004cc984846200616c565b90508381101562004d2757808403600c811162004ce7578062004cea565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a608654028162004d1c5762004d1c62006096565b046086555062004d9e565b838103600c811162004d3a578062004d3d565b600c5b90505f816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004d765762004d7662006096565b04905080608654670de0b6b3a7640000028162004d975762004d9762006096565b0460865550505b683635c9adc5dea00000608654111562004dc557683635c9adc5dea0000060865562004ddd565b633b9aca00608654101562004ddd57633b9aca006086555b5050505050505050565b600681015467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116700100000000000000000000000000000000909204161115620036415760068101545f9062004e6a907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600162005f1f565b905062004e78828262003a8b565b15620019dc5760068201545f9060029062004eb3908490700100000000000000000000000000000000900467ffffffffffffffff166200603b565b62004ebf919062006301565b62004ecb908362005f1f565b905062004ed9838262003a8b565b1562004eeb5762001742838262004598565b62001742838362004598565b606f5460ff1662004f34576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b608080545f918291829062004fa19063ffffffff1662005f64565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060835f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055508060825f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff16021790555060815f8263ffffffff1663ffffffff1681526020019081526020015f20915087825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858260010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555086826001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084825f0160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620051f695949392919067ffffffffffffffff958616815273ffffffffffffffffffffffffffffffffffffffff949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b5f82815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16620019dc576040517fec2b7c3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052620017429084906200541b565b606f5460ff16156200533f576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b5f67ffffffff0000000167ffffffffffffffff8316108015620053cc575067ffffffff00000001604083901c67ffffffffffffffff16105b8015620053ee575067ffffffff00000001608083901c67ffffffffffffffff16105b801562005406575067ffffffff0000000160c083901c105b156200541457506001919050565b505f919050565b5f6200547e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200552d9092919063ffffffff16565b8051909150156200174257808060200190518101906200549f9190620062e0565b62001742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000de8565b60606200553d84845f8562005545565b949350505050565b606082471015620055d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000de8565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405162005603919062006287565b5f6040518083038185875af1925050503d805f81146200563f576040519150601f19603f3d011682016040523d82523d5f602084013e62005644565b606091505b50915091506200221d8783838760608315620056eb5782515f03620056e35773ffffffffffffffffffffffffffffffffffffffff85163b620056e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000de8565b50816200553d565b6200553d8383815115620057025781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de8919062005ce7565b610a5e806200632b83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462003641575f80fd5b803567ffffffffffffffff8116811462003b62575f80fd5b5f805f805f805f805f806101408b8d0312156200579b575f80fd5b8a35620057a88162005746565b9950620057b860208c0162005768565b9850620057c860408c0162005768565b975060608b0135620057da8162005746565b965060808b0135620057ec8162005746565b955060a08b0135620057fe8162005746565b945060c08b0135620058108162005746565b935060e08b0135620058228162005746565b9250620058336101008c0162005768565b9150620058446101208c0162005768565b90509295989b9194979a5092959850565b803563ffffffff8116811462003b62575f80fd5b5f80604083850312156200587b575f80fd5b620058868362005855565b9150620058966020840162005768565b90509250929050565b5f60208284031215620058b0575f80fd5b620012448262005855565b80610300810183101562001247575f80fd5b5f805f805f805f806103e0898b031215620058e6575f80fd5b620058f18962005855565b97506200590160208a0162005768565b96506200591160408a0162005768565b95506200592160608a0162005768565b94506200593160808a0162005768565b935060a0890135925060c08901359150620059508a60e08b01620058bb565b90509295985092959890939650565b5f805f805f805f806103e0898b03121562005978575f80fd5b620059838962005855565b97506200599360208a0162005768565b9650620059a360408a0162005768565b9550620059b360608a0162005768565b94506080890135935060a0890135925060c0890135620059d38162005746565b9150620059508a60e08b01620058bb565b5f60208284031215620059f5575f80fd5b813561ffff8116811462005a07575f80fd5b9392505050565b5f6020828403121562005a1f575f80fd5b5035919050565b5f806040838503121562005a38575f80fd5b82359150602083013562005a4c8162005746565b809150509250929050565b5f6020828403121562005a68575f80fd5b620012448262005768565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011262005ab0575f80fd5b813567ffffffffffffffff8082111562005ace5762005ace62005a73565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562005b175762005b1762005a73565b8160405283815286602085880101111562005b30575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a03121562005b66575f80fd5b62005b718862005855565b965062005b816020890162005768565b9550604088013562005b938162005746565b9450606088013562005ba58162005746565b9350608088013562005bb78162005746565b925060a088013567ffffffffffffffff8082111562005bd4575f80fd5b62005be28b838c0162005aa0565b935060c08a013591508082111562005bf8575f80fd5b5062005c078a828b0162005aa0565b91505092959891949750929550565b5f805f805f8060c0878903121562005c2c575f80fd5b62005c378762005855565b955062005c476020880162005768565b945062005c576040880162005768565b9350606087013592506080870135915060a087013590509295509295509295565b5f5b8381101562005c9457818101518382015260200162005c7a565b50505f910152565b5f815180845262005cb581602086016020860162005c78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f62001244602083018462005c9c565b5f806040838503121562005d0d575f80fd5b62005d188362005768565b946020939093013593505050565b5f805f806060858703121562005d3a575f80fd5b843562005d478162005746565b935062005d576020860162005855565b9250604085013567ffffffffffffffff8082111562005d74575f80fd5b818701915087601f83011262005d88575f80fd5b81358181111562005d97575f80fd5b88602082850101111562005da9575f80fd5b95989497505060200194505050565b5f6020828403121562005dc9575f80fd5b813562005a078162005746565b803560ff8116811462003b62575f80fd5b5f805f805f8060c0878903121562005dfd575f80fd5b863562005e0a8162005746565b9550602087013562005e1c8162005746565b945062005e2c6040880162005768565b935062005e3c6060880162005768565b92506080870135915062005e5360a0880162005dd6565b90509295509295509295565b5f805f805f8060c0878903121562005e75575f80fd5b863562005e828162005746565b9550602087013562005e948162005746565b945062005ea46040880162005768565b935062005eb46060880162005dd6565b92506080870135915060a087013567ffffffffffffffff81111562005ed7575f80fd5b62005ee589828a0162005aa0565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff81811683821601908082111562005f435762005f4362005ef2565b5092915050565b808202811582820484141762001247576200124762005ef2565b5f63ffffffff80831681810362005f7f5762005f7f62005ef2565b6001019392505050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005fc3606083018462005c9c565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015263ffffffff8716604084015280861660608401525060c060808301526200601a60c083018562005c9c565b82810360a08401526200602e818562005c9c565b9998505050505050505050565b67ffffffffffffffff82811682821603908082111562005f435762005f4362005ef2565b5f67ffffffffffffffff80831681810362005f7f5762005f7f62005ef2565b5f602082840312156200608f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82620060d457620060d462006096565b500490565b8082018082111562001247576200124762005ef2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200614f576200614f62005ef2565b5060010190565b5f8262006167576200616762006096565b500690565b8181038181111562001247576200124762005ef2565b5f8162006193576200619362005ef2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525067ffffffffffffffff8616604083015260ff8516606083015283608083015260c060a08301526200627b60c083018462005c9c565b98975050505050505050565b5f82516200629a81846020870162005c78565b9190910192915050565b6103208101610300808584378201835f5b6001811015620062d6578151835260209283019290910190600101620062b5565b5050509392505050565b5f60208284031215620062f1575f80fd5b8151801515811462005a07575f80fd5b5f67ffffffffffffffff808416806200631e576200631e62006096565b9216919091049291505056fe60a060405260405162000a5e38038062000a5e833981016040819052620000269162000375565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c5565b5050506200046c565b6200006b8262000136565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115620000b757620000b28282620001b5565b505050565b620000c16200022e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001065f8051602062000a3e833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001338162000250565b50565b806001600160a01b03163b5f036200017157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b031684604051620001d391906200044f565b5f60405180830381855af49150503d805f81146200020d576040519150601f19603f3d011682016040523d82523d5f602084013e62000212565b606091505b5090925090506200022585838362000291565b95945050505050565b34156200024e5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200027b57604051633173bdd160e11b81525f600482015260240162000168565b805f8051602062000a3e83398151915262000194565b606082620002aa57620002a482620002f7565b620002f0565b8151158015620002c257506001600160a01b0384163b155b15620002ed57604051639996b31560e01b81526001600160a01b038516600482015260240162000168565b50805b9392505050565b805115620003085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811462000338575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200036d57818101518382015260200162000353565b50505f910152565b5f805f6060848603121562000388575f80fd5b620003938462000321565b9250620003a36020850162000321565b60408501519092506001600160401b0380821115620003c0575f80fd5b818601915086601f830112620003d4575f80fd5b815181811115620003e957620003e96200033d565b604051601f8201601f19908116603f011681019083821181831017156200041457620004146200033d565b816040528281528960208487010111156200042d575f80fd5b6200044083602083016020880162000351565b80955050505050509250925092565b5f82516200046281846020870162000351565b9190910192915050565b6080516105ba620004845f395f601001526105ba5ff3fe608060405261000c61000e565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633036100a7575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef286000000000000000000000000000000000000000000000000000000001461009f5761009d6100ab565b565b61009d6100bb565b61009d5b61009d6100b66100e9565b61012d565b5f806100ca3660048184610410565b8101906100d79190610464565b915091506100e5828261014b565b5050565b5f6101287f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b365f80375f80365f845af43d5f803e808015610147573d5ff35b3d5ffd5b610154826101b2565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101aa576101a58282610285565b505050565b6100e5610304565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361021f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516102ae9190610558565b5f60405180830381855af49150503d805f81146102e6576040519150601f19603f3d011682016040523d82523d5f602084013e6102eb565b606091505b50915091506102fb85838361033c565b95945050505050565b341561009d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103515761034c826103ce565b6103c7565b8151158015610375575073ffffffffffffffffffffffffffffffffffffffff84163b155b156103c4576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610216565b50805b9392505050565b8051156103de5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808585111561041e575f80fd5b8386111561042a575f80fd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610475575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610498575f80fd5b9150602083013567ffffffffffffffff808211156104b4575f80fd5b818501915085601f8301126104c7575f80fd5b8135818111156104d9576104d9610437565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561051f5761051f610437565b81604052828152886020848701011115610537575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f82515f5b81811015610577576020818601810151858301520161055d565b505f92019182525091905056fea26469706673582212200ca61bd1e45d482203caba1d216b11bb6992f1ce0f6427bfe86e65b2f53457a264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212201a2ae2d730801f81f42936329f636b8afe39749919cb9dab4748bf0eae19efe364736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonValidiumEtrog.json b/compiled-contracts/PolygonValidiumEtrog.json index 0a8e6a655..520a989a5 100644 --- a/compiled-contracts/PolygonValidiumEtrog.json +++ b/compiled-contracts/PolygonValidiumEtrog.json @@ -1304,8 +1304,8 @@ "type": "function" } ], - "bytecode": "0x61010060405234801562000011575f80fd5b50604051620050e6380380620050e683398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e051614f05620001e15f395f818161053b01528181610b3801528181610ca401528181610eec015281816114be01528181611a2201528181611e7101528181611f6601528181612b4801528181612bc701528181612be901528181612d8501528181612f900152818161305501528181613ae701528181613b6001528181613b820152613c2a01525f81816106dc015281816110e0015281816111b5015281816121300152818161223801528181612683015261363501525f818161079801528181611335015281816126ff0152818161319d01526136b101525f81816107f0015281816108cd01528181611eba01528181612c9501526131720152614f055ff3fe608060405234801561000f575f80fd5b506004361061030e575f3560e01c80637a5460c51161019d578063c89e42df116100e8578063e46761c411610093578063eaeb077b1161006e578063eaeb077b14610846578063f35dda4714610859578063f851a44014610861575f80fd5b8063e46761c4146107eb578063e57a0b4c14610812578063e7a7ed0214610832575f80fd5b8063d7bc90ff116100c3578063d7bc90ff146107ba578063db5b0ed7146107c5578063def57e54146107d8575f80fd5b8063c89e42df14610760578063cfa8ed4714610773578063d02103ca14610793575f80fd5b8063a3c573eb11610148578063b0afe15411610123578063b0afe15414610724578063c754c7ed14610730578063c7fffd4b14610758575f80fd5b8063a3c573eb146106d7578063a652f26c146106fe578063ada8f91914610711575f80fd5b806391cafe321161017857806391cafe32146106965780639e001877146106a95780639f26f840146106c4575f80fd5b80637a5460c51461063f5780637cd76b8b1461067b5780638c3d73011461068e575f80fd5b806342308fab1161025d578063542028d5116102085780636e05d2cd116101e35780636e05d2cd146106105780636ff512cc14610619578063712570221461062c575f80fd5b8063542028d5146105e1578063676870d2146105e95780636b8616ce146105f1575f80fd5b80634c21fef3116102385780634c21fef31461055d5780634e4877061461059257806352bdeb6d146105a5575f80fd5b806342308fab146104f557806345605267146104fd57806349b7b80214610536575f80fd5b80632acdc2b6116102bd5780633c351e10116102985780633c351e10146104405780633cbc795b1461046057806340b5de6c1461049d575f80fd5b80632acdc2b6146103f85780632c111c061461040d57806332c2d1531461042d575f80fd5b8063107bf28c116102ed578063107bf28c1461039157806311e892d41461039957806326782247146103b3575f80fd5b8062d0295d14610312578063035089631461032d57806305835f3714610348575b5f80fd5b61031a610886565b6040519081526020015b60405180910390f35b610335602081565b60405161ffff9091168152602001610324565b6103846040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103249190614034565b61038461098c565b6103a160f981565b60405160ff9091168152602001610324565b6001546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610324565b61040b61040636600461405d565b610a18565b005b6008546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b61040b61043b3660046140c9565b610b36565b6009546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104889074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610324565b6104c47fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610324565b61031a602481565b60075461051d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610324565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546105829074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610324565b61040b6105a0366004614108565b610c05565b6103846040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610384610e14565b610335601f81565b61031a6105ff366004614108565b60066020525f908152604090205481565b61031a60055481565b61040b610627366004614123565b610e21565b61040b61063a36600461428b565b610eea565b6103846040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040b610689366004614123565b6116f3565b61040b6117bc565b61040b6106a4366004614123565b61188e565b6103d373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040b6106d236600461437a565b6119a6565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61038461070c3660046143b9565b612032565b61040b61071f366004614123565b612410565b61031a6405ca1ab1e081565b60075461051d90700100000000000000000000000000000000900467ffffffffffffffff1681565b6103a160e481565b61040b61076e36600461442a565b6124d9565b6002546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61031a635ca1ab1e81565b61040b6107d336600461449a565b61256b565b61040b6107e6366004614563565b612eb1565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60075461051d9067ffffffffffffffff1681565b61040b6108543660046145db565b612f19565b6103a1601b81565b5f546103d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109369190614623565b6007549091505f906109609067ffffffffffffffff68010000000000000000820481169116614667565b67ffffffffffffffff169050805f0361097b575f9250505090565b610985818361468f565b9250505090565b60048054610999906146c7565b80601f01602080910402602001604051908101604052809291908181526020018280546109c5906146c7565b8015610a105780601f106109e757610100808354040283529160200191610a10565b820191905f5260205f20905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a6e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c5474010000000000000000000000000000000000000000900460ff16151581151503610ac8576040517f5f0e7abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515021790556040517ff32a0473f809a720a4f8af1e50d353f1caf7452030626fdaac4273f5e6587f41905f90a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610ba5576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610bf891815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c5b576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ca2576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614718565b610d905760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610d90576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b60038054610999906146c7565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610e77576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610e09565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610f59576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610f7757505f54600160ff909116105b80610f905750303b158015610f9057505f5460ff166001145b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107d575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156112da576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015611124573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111699190810190614733565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa1580156111fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121f91906147a5565b915091508163ffffffff165f14611296576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556112d7565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061132190889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685612032565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561139c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c09190614623565b90505f808483858f6113d36001436147dd565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611519573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153d91906147f6565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816115cd9190614856565b5060046115da8982614856565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161167a9392919061496e565b60405180910390a150505050505080156116ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611749576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd331bd4c4cd1afecb94a225184bded161ff3213624ba4fb58c4f30c5a861144a90602001610e09565b60015473ffffffffffffffffffffffffffffffffffffffff16331461180d576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146118e4576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611933576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610e09565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906119e4575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611a1b576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad91906147f6565b611ab791906149ac565b67ffffffffffffffff161115611af9576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611b34576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611b70576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611b98918491680100000000000000009004166149cd565b1115611bd0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611e6b575f878783818110611c0b57611c0b6149e0565b9050602002810190611c1d9190614a0d565b611c2690614a49565b905083611c3281614ab4565b825180516020918201208185015160408087015160608801519151959a509295505f94611c9e948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611d26576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611d4a6001886147dd565b8403611db95742600760109054906101000a900467ffffffffffffffff168460400151611d7791906149ac565b67ffffffffffffffff161115611db9576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611e6390614ada565b915050611bf0565b50611ee17f000000000000000000000000000000000000000000000000000000000000000084611e99610886565b611ea39190614b11565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906133e0565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611fb2908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff291906147f6565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f8760405160240161206496959493929190614b28565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036121b45760f9601f83516120f89190614b8a565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e48760405160200161219e9796959493929190614ba5565b60405160208183030381529060405290506122b8565b815161ffff10156121f1576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9612200602083614b8a565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016122a59796959493929190614c87565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612316573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661238e576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906123d39084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614d69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612466576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610e09565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff16331461252f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361253b8282614856565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610e099190614034565b60025473ffffffffffffffffffffffffffffffffffffffff1633146125bc576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f8190036125f7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612633576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263e6024426149cd565b8667ffffffffffffffff161115612681576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156126e6575f80fd5b505af11580156126f8573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612766573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278a9190614623565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f805b86811015612abb575f8e8e838181106127c9576127c96149e0565b9050608002018036038101906127df9190614dc4565b604081015190915067ffffffffffffffff16156129cc578561280081614ab4565b9650505f815f01518260200151836040015184606001516040516020016128659493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146128ed576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85825f0151836020015184604001518f8660600151604051602001612986969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b60405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612aa8565b80516040516129e8918591602001918252602082015260400190565b60405160208183030381529060405280519060200120925084815f0151888f8e5f801b604051602001612a8f969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b6040516020818303038152906040528051906020012094505b5080612ab381614ada565b9150506127ae565b5060075467ffffffffffffffff9081169085161115612b06576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058390558567ffffffffffffffff85811690841614612bbb575f612b2b8487614667565b9050612b4167ffffffffffffffff8216836147dd565b9150612b7a7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611e99610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8816021790555b8015612d4457612cbd337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c749190614623565b612c7e9190614b11565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906134b9565b603c546040517f3b51be4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633b51be4b90612d179085908d908d90600401614e57565b5f6040518083038186803b158015612d2d575f80fd5b505afa158015612d3f573d5f803e3d5ffd5b505050505b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018590525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0491906147f6565b9050612e108882614667565b67ffffffffffffffff168c67ffffffffffffffff1614612e5c576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612e9891815260200190565b60405180910390a2505050505050505050505050505050565b603c5474010000000000000000000000000000000000000000900460ff16612f05576040517f821935b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f12858585858561351d565b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612f57575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612f8e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301b9190614718565b15613052576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e09190614623565b90508281111561311c576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115613158576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61319a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846134b9565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613204573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132289190614623565b6007805491925067ffffffffffffffff909116905f61324683614ab4565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161327d929190614e70565b60405190819003902081426132936001436147dd565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303613389576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26133d8565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906133cf90849033908b908b90614e7f565b60405180910390a25b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526134b49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d53565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135179085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613432565b50505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461356e576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036135a9576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156135e5576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135f06024426149cd565b8467ffffffffffffffff161115613633576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613698575f80fd5b505af11580156136aa573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015613718573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061373c9190614623565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015613a5a575f8b8b8381811061377a5761377a6149e0565b905060200281019061378c9190614a0d565b61379590614a49565b8051805160209091012060408201519192509067ffffffffffffffff161561397557856137c181614ab4565b9650505f818360200151846040015185606001516040516020016138239493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146138ab576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550613a45565b8151516201d4c010156139b4576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080613a5290614ada565b91505061375f565b5060075467ffffffffffffffff9081169084161115613aa5576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614613b5a575f613aca8386614667565b9050613ae067ffffffffffffffff8216836147dd565b9150613b197f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611e99610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b613be9337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015613c85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ca991906147f6565b9050613cb58782614667565b67ffffffffffffffff168967ffffffffffffffff1614613d01576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051613d3d91815260200190565b60405180910390a2505050505050505050505050565b5f613db4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e5e9092919063ffffffff16565b8051909150156134b45780806020019051810190613dd29190614718565b6134b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611018565b606061240884845f85855f808673ffffffffffffffffffffffffffffffffffffffff168587604051613e909190614ebe565b5f6040518083038185875af1925050503d805f8114613eca576040519150601f19603f3d011682016040523d82523d5f602084013e613ecf565b606091505b5091509150613ee087838387613eeb565b979650505050505050565b60608315613f805782515f03613f795773ffffffffffffffffffffffffffffffffffffffff85163b613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611018565b5081612408565b6124088383815115613f955781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189190614034565b5f5b83811015613fe3578181015183820152602001613fcb565b50505f910152565b5f8151808452614002816020860160208601613fc9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6140466020830184613feb565b9392505050565b801515811461405a575f80fd5b50565b5f6020828403121561406d575f80fd5b81356140468161404d565b67ffffffffffffffff8116811461405a575f80fd5b803561409881614078565b919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461405a575f80fd5b80356140988161409d565b5f805f606084860312156140db575f80fd5b83356140e681614078565b92506020840135915060408401356140fd8161409d565b809150509250925092565b5f60208284031215614118575f80fd5b813561404681614078565b5f60208284031215614133575f80fd5b81356140468161409d565b63ffffffff8116811461405a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561419f5761419f61414f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156141ec576141ec61414f565b604052919050565b5f67ffffffffffffffff82111561420d5761420d61414f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614248575f80fd5b813561425b614256826141f4565b6141a5565b81815284602083860101111561426f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156142a0575f80fd5b86356142ab8161409d565b955060208701356142bb8161409d565b945060408701356142cb8161413e565b935060608701356142db8161409d565b9250608087013567ffffffffffffffff808211156142f7575f80fd5b6143038a838b01614239565b935060a0890135915080821115614318575f80fd5b5061432589828a01614239565b9150509295509295509295565b5f8083601f840112614342575f80fd5b50813567ffffffffffffffff811115614359575f80fd5b6020830191508360208260051b8501011115614373575f80fd5b9250929050565b5f806020838503121561438b575f80fd5b823567ffffffffffffffff8111156143a1575f80fd5b6143ad85828601614332565b90969095509350505050565b5f805f80608085870312156143cc575f80fd5b84356143d78161413e565b935060208501356143e78161409d565b925060408501356143f78161413e565b9150606085013567ffffffffffffffff811115614412575f80fd5b61441e87828801614239565b91505092959194509250565b5f6020828403121561443a575f80fd5b813567ffffffffffffffff811115614450575f80fd5b61240884828501614239565b5f8083601f84011261446c575f80fd5b50813567ffffffffffffffff811115614483575f80fd5b602083019150836020828501011115614373575f80fd5b5f805f805f805f60a0888a0312156144b0575f80fd5b873567ffffffffffffffff808211156144c7575f80fd5b818a0191508a601f8301126144da575f80fd5b8135818111156144e8575f80fd5b8b60208260071b85010111156144fc575f80fd5b6020830199508098505061451260208b0161408d565b965061452060408b0161408d565b955061452e60608b016140be565b945060808a0135915080821115614543575f80fd5b506145508a828b0161445c565b989b979a50959850939692959293505050565b5f805f805f60808688031215614577575f80fd5b853567ffffffffffffffff81111561458d575f80fd5b61459988828901614332565b90965094505060208601356145ad81614078565b925060408601356145bd81614078565b915060608601356145cd8161409d565b809150509295509295909350565b5f805f604084860312156145ed575f80fd5b833567ffffffffffffffff811115614603575f80fd5b61460f8682870161445c565b909790965060209590950135949350505050565b5f60208284031215614633575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff8281168282160390808211156146885761468861463a565b5092915050565b5f826146c2577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806146db57607f821691505b602082108103614712577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614728575f80fd5b81516140468161404d565b5f60208284031215614743575f80fd5b815167ffffffffffffffff811115614759575f80fd5b8201601f81018413614769575f80fd5b8051614777614256826141f4565b81815285602083850101111561478b575f80fd5b61479c826020830160208601613fc9565b95945050505050565b5f80604083850312156147b6575f80fd5b82516147c18161413e565b60208401519092506147d28161409d565b809150509250929050565b818103818111156147f0576147f061463a565b92915050565b5f60208284031215614806575f80fd5b815161404681614078565b601f8211156134b4575f81815260208120601f850160051c810160208610156148375750805b601f850160051c820191505b818110156133d857828155600101614843565b815167ffffffffffffffff8111156148705761487061414f565b6148848161487e84546146c7565b84614811565b602080601f8311600181146148d6575f84156148a05750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556133d8565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561492257888601518255948401946001909101908401614903565b508582101561495e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f6149806060830186613feb565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff8181168382160190808211156146885761468861463a565b808201808211156147f0576147f061463a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614a3f575f80fd5b9190910192915050565b5f60808236031215614a59575f80fd5b614a6161417c565b823567ffffffffffffffff811115614a77575f80fd5b614a8336828601614239565b825250602083013560208201526040830135614a9e81614078565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103614ad057614ad061463a565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b0a57614b0a61463a565b5060010190565b80820281158282048414176147f0576147f061463a565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152614b7e60c0830184613feb565b98975050505050505050565b61ffff8181168382160190808211156146885761468861463a565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614c0d816003860160208c01613fc9565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614c50816017840160208b01613fc9565b808201915050818660f81b16601782015284519150614c76826018830160208801613fc9565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751614cef816003860160208c01613fc9565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614d32816017840160208b01613fc9565b808201915050818660f01b16601782015284519150614d58826019830160208801613fc9565b016019019998505050505050505050565b5f8651614d7a818460208b01613fc9565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b5f60808284031215614dd4575f80fd5b614ddc61417c565b82358152602083013560208201526040830135614df881614078565b60408201526060928301359281019290925250919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b838152604060208201525f61479c604083018486614e10565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201525f614eb4606083018486614e10565b9695505050505050565b5f8251614a3f818460208701613fc956fea2646970667358221220afc20b00ef4889deeb5eada329ef176775231f092c36162bd0e46f54f3842def64736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061030e575f3560e01c80637a5460c51161019d578063c89e42df116100e8578063e46761c411610093578063eaeb077b1161006e578063eaeb077b14610846578063f35dda4714610859578063f851a44014610861575f80fd5b8063e46761c4146107eb578063e57a0b4c14610812578063e7a7ed0214610832575f80fd5b8063d7bc90ff116100c3578063d7bc90ff146107ba578063db5b0ed7146107c5578063def57e54146107d8575f80fd5b8063c89e42df14610760578063cfa8ed4714610773578063d02103ca14610793575f80fd5b8063a3c573eb11610148578063b0afe15411610123578063b0afe15414610724578063c754c7ed14610730578063c7fffd4b14610758575f80fd5b8063a3c573eb146106d7578063a652f26c146106fe578063ada8f91914610711575f80fd5b806391cafe321161017857806391cafe32146106965780639e001877146106a95780639f26f840146106c4575f80fd5b80637a5460c51461063f5780637cd76b8b1461067b5780638c3d73011461068e575f80fd5b806342308fab1161025d578063542028d5116102085780636e05d2cd116101e35780636e05d2cd146106105780636ff512cc14610619578063712570221461062c575f80fd5b8063542028d5146105e1578063676870d2146105e95780636b8616ce146105f1575f80fd5b80634c21fef3116102385780634c21fef31461055d5780634e4877061461059257806352bdeb6d146105a5575f80fd5b806342308fab146104f557806345605267146104fd57806349b7b80214610536575f80fd5b80632acdc2b6116102bd5780633c351e10116102985780633c351e10146104405780633cbc795b1461046057806340b5de6c1461049d575f80fd5b80632acdc2b6146103f85780632c111c061461040d57806332c2d1531461042d575f80fd5b8063107bf28c116102ed578063107bf28c1461039157806311e892d41461039957806326782247146103b3575f80fd5b8062d0295d14610312578063035089631461032d57806305835f3714610348575b5f80fd5b61031a610886565b6040519081526020015b60405180910390f35b610335602081565b60405161ffff9091168152602001610324565b6103846040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103249190614034565b61038461098c565b6103a160f981565b60405160ff9091168152602001610324565b6001546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610324565b61040b61040636600461405d565b610a18565b005b6008546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b61040b61043b3660046140c9565b610b36565b6009546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104889074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610324565b6104c47fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610324565b61031a602481565b60075461051d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610324565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546105829074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610324565b61040b6105a0366004614108565b610c05565b6103846040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610384610e14565b610335601f81565b61031a6105ff366004614108565b60066020525f908152604090205481565b61031a60055481565b61040b610627366004614123565b610e21565b61040b61063a36600461428b565b610eea565b6103846040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040b610689366004614123565b6116f3565b61040b6117bc565b61040b6106a4366004614123565b61188e565b6103d373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040b6106d236600461437a565b6119a6565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61038461070c3660046143b9565b612032565b61040b61071f366004614123565b612410565b61031a6405ca1ab1e081565b60075461051d90700100000000000000000000000000000000900467ffffffffffffffff1681565b6103a160e481565b61040b61076e36600461442a565b6124d9565b6002546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61031a635ca1ab1e81565b61040b6107d336600461449a565b61256b565b61040b6107e6366004614563565b612eb1565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60075461051d9067ffffffffffffffff1681565b61040b6108543660046145db565b612f19565b6103a1601b81565b5f546103d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109369190614623565b6007549091505f906109609067ffffffffffffffff68010000000000000000820481169116614667565b67ffffffffffffffff169050805f0361097b575f9250505090565b610985818361468f565b9250505090565b60048054610999906146c7565b80601f01602080910402602001604051908101604052809291908181526020018280546109c5906146c7565b8015610a105780601f106109e757610100808354040283529160200191610a10565b820191905f5260205f20905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a6e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c5474010000000000000000000000000000000000000000900460ff16151581151503610ac8576040517f5f0e7abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515021790556040517ff32a0473f809a720a4f8af1e50d353f1caf7452030626fdaac4273f5e6587f41905f90a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610ba5576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610bf891815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c5b576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ca2576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614718565b610d905760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610d90576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b60038054610999906146c7565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610e77576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610e09565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610f59576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610f7757505f54600160ff909116105b80610f905750303b158015610f9057505f5460ff166001145b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107d575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156112da576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015611124573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111699190810190614733565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa1580156111fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121f91906147a5565b915091508163ffffffff165f14611296576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556112d7565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061132190889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685612032565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561139c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c09190614623565b90505f808483858f6113d36001436147dd565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611519573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153d91906147f6565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816115cd9190614856565b5060046115da8982614856565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161167a9392919061496e565b60405180910390a150505050505080156116ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611749576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd331bd4c4cd1afecb94a225184bded161ff3213624ba4fb58c4f30c5a861144a90602001610e09565b60015473ffffffffffffffffffffffffffffffffffffffff16331461180d576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146118e4576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611933576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610e09565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906119e4575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611a1b576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aad91906147f6565b611ab791906149ac565b67ffffffffffffffff161115611af9576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611b34576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611b70576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611b98918491680100000000000000009004166149cd565b1115611bd0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611e6b575f878783818110611c0b57611c0b6149e0565b9050602002810190611c1d9190614a0d565b611c2690614a49565b905083611c3281614ab4565b825180516020918201208185015160408087015160608801519151959a509295505f94611c9e948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611d26576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611d4a6001886147dd565b8403611db95742600760109054906101000a900467ffffffffffffffff168460400151611d7791906149ac565b67ffffffffffffffff161115611db9576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611e6390614ada565b915050611bf0565b50611ee17f000000000000000000000000000000000000000000000000000000000000000084611e99610886565b611ea39190614b11565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906133e0565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611fb2908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff291906147f6565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f8760405160240161206496959493929190614b28565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036121b45760f9601f83516120f89190614b8a565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e48760405160200161219e9796959493929190614ba5565b60405160208183030381529060405290506122b8565b815161ffff10156121f1576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9612200602083614b8a565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016122a59796959493929190614c87565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612316573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661238e576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906123d39084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614d69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612466576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610e09565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff16331461252f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361253b8282614856565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610e099190614034565b60025473ffffffffffffffffffffffffffffffffffffffff1633146125bc576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f8190036125f7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612633576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263e6024426149cd565b8667ffffffffffffffff161115612681576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156126e6575f80fd5b505af11580156126f8573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612766573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278a9190614623565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f805b86811015612abb575f8e8e838181106127c9576127c96149e0565b9050608002018036038101906127df9190614dc4565b604081015190915067ffffffffffffffff16156129cc578561280081614ab4565b9650505f815f01518260200151836040015184606001516040516020016128659493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146128ed576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85825f0151836020015184604001518f8660600151604051602001612986969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b60405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612aa8565b80516040516129e8918591602001918252602082015260400190565b60405160208183030381529060405280519060200120925084815f0151888f8e5f801b604051602001612a8f969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b6040516020818303038152906040528051906020012094505b5080612ab381614ada565b9150506127ae565b5060075467ffffffffffffffff9081169085161115612b06576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058390558567ffffffffffffffff85811690841614612bbb575f612b2b8487614667565b9050612b4167ffffffffffffffff8216836147dd565b9150612b7a7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611e99610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8816021790555b8015612d4457612cbd337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c749190614623565b612c7e9190614b11565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906134b9565b603c546040517f3b51be4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633b51be4b90612d179085908d908d90600401614e57565b5f6040518083038186803b158015612d2d575f80fd5b505afa158015612d3f573d5f803e3d5ffd5b505050505b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018590525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0491906147f6565b9050612e108882614667565b67ffffffffffffffff168c67ffffffffffffffff1614612e5c576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612e9891815260200190565b60405180910390a2505050505050505050505050505050565b603c5474010000000000000000000000000000000000000000900460ff16612f05576040517f821935b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f12858585858561351d565b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612f57575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612f8e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301b9190614718565b15613052576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e09190614623565b90508281111561311c576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115613158576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61319a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846134b9565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613204573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132289190614623565b6007805491925067ffffffffffffffff909116905f61324683614ab4565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161327d929190614e70565b60405190819003902081426132936001436147dd565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303613389576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26133d8565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906133cf90849033908b908b90614e7f565b60405180910390a25b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526134b49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d53565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135179085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613432565b50505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461356e576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036135a9576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156135e5576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135f06024426149cd565b8467ffffffffffffffff161115613633576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613698575f80fd5b505af11580156136aa573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015613718573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061373c9190614623565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015613a5a575f8b8b8381811061377a5761377a6149e0565b905060200281019061378c9190614a0d565b61379590614a49565b8051805160209091012060408201519192509067ffffffffffffffff161561397557856137c181614ab4565b9650505f818360200151846040015185606001516040516020016138239493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146138ab576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550613a45565b8151516201d4c010156139b4576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080613a5290614ada565b91505061375f565b5060075467ffffffffffffffff9081169084161115613aa5576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614613b5a575f613aca8386614667565b9050613ae067ffffffffffffffff8216836147dd565b9150613b197f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611e99610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b613be9337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015613c85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ca991906147f6565b9050613cb58782614667565b67ffffffffffffffff168967ffffffffffffffff1614613d01576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051613d3d91815260200190565b60405180910390a2505050505050505050505050565b5f613db4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e5e9092919063ffffffff16565b8051909150156134b45780806020019051810190613dd29190614718565b6134b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611018565b606061240884845f85855f808673ffffffffffffffffffffffffffffffffffffffff168587604051613e909190614ebe565b5f6040518083038185875af1925050503d805f8114613eca576040519150601f19603f3d011682016040523d82523d5f602084013e613ecf565b606091505b5091509150613ee087838387613eeb565b979650505050505050565b60608315613f805782515f03613f795773ffffffffffffffffffffffffffffffffffffffff85163b613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611018565b5081612408565b6124088383815115613f955781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189190614034565b5f5b83811015613fe3578181015183820152602001613fcb565b50505f910152565b5f8151808452614002816020860160208601613fc9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6140466020830184613feb565b9392505050565b801515811461405a575f80fd5b50565b5f6020828403121561406d575f80fd5b81356140468161404d565b67ffffffffffffffff8116811461405a575f80fd5b803561409881614078565b919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461405a575f80fd5b80356140988161409d565b5f805f606084860312156140db575f80fd5b83356140e681614078565b92506020840135915060408401356140fd8161409d565b809150509250925092565b5f60208284031215614118575f80fd5b813561404681614078565b5f60208284031215614133575f80fd5b81356140468161409d565b63ffffffff8116811461405a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561419f5761419f61414f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156141ec576141ec61414f565b604052919050565b5f67ffffffffffffffff82111561420d5761420d61414f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614248575f80fd5b813561425b614256826141f4565b6141a5565b81815284602083860101111561426f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156142a0575f80fd5b86356142ab8161409d565b955060208701356142bb8161409d565b945060408701356142cb8161413e565b935060608701356142db8161409d565b9250608087013567ffffffffffffffff808211156142f7575f80fd5b6143038a838b01614239565b935060a0890135915080821115614318575f80fd5b5061432589828a01614239565b9150509295509295509295565b5f8083601f840112614342575f80fd5b50813567ffffffffffffffff811115614359575f80fd5b6020830191508360208260051b8501011115614373575f80fd5b9250929050565b5f806020838503121561438b575f80fd5b823567ffffffffffffffff8111156143a1575f80fd5b6143ad85828601614332565b90969095509350505050565b5f805f80608085870312156143cc575f80fd5b84356143d78161413e565b935060208501356143e78161409d565b925060408501356143f78161413e565b9150606085013567ffffffffffffffff811115614412575f80fd5b61441e87828801614239565b91505092959194509250565b5f6020828403121561443a575f80fd5b813567ffffffffffffffff811115614450575f80fd5b61240884828501614239565b5f8083601f84011261446c575f80fd5b50813567ffffffffffffffff811115614483575f80fd5b602083019150836020828501011115614373575f80fd5b5f805f805f805f60a0888a0312156144b0575f80fd5b873567ffffffffffffffff808211156144c7575f80fd5b818a0191508a601f8301126144da575f80fd5b8135818111156144e8575f80fd5b8b60208260071b85010111156144fc575f80fd5b6020830199508098505061451260208b0161408d565b965061452060408b0161408d565b955061452e60608b016140be565b945060808a0135915080821115614543575f80fd5b506145508a828b0161445c565b989b979a50959850939692959293505050565b5f805f805f60808688031215614577575f80fd5b853567ffffffffffffffff81111561458d575f80fd5b61459988828901614332565b90965094505060208601356145ad81614078565b925060408601356145bd81614078565b915060608601356145cd8161409d565b809150509295509295909350565b5f805f604084860312156145ed575f80fd5b833567ffffffffffffffff811115614603575f80fd5b61460f8682870161445c565b909790965060209590950135949350505050565b5f60208284031215614633575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff8281168282160390808211156146885761468861463a565b5092915050565b5f826146c2577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806146db57607f821691505b602082108103614712577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614728575f80fd5b81516140468161404d565b5f60208284031215614743575f80fd5b815167ffffffffffffffff811115614759575f80fd5b8201601f81018413614769575f80fd5b8051614777614256826141f4565b81815285602083850101111561478b575f80fd5b61479c826020830160208601613fc9565b95945050505050565b5f80604083850312156147b6575f80fd5b82516147c18161413e565b60208401519092506147d28161409d565b809150509250929050565b818103818111156147f0576147f061463a565b92915050565b5f60208284031215614806575f80fd5b815161404681614078565b601f8211156134b4575f81815260208120601f850160051c810160208610156148375750805b601f850160051c820191505b818110156133d857828155600101614843565b815167ffffffffffffffff8111156148705761487061414f565b6148848161487e84546146c7565b84614811565b602080601f8311600181146148d6575f84156148a05750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556133d8565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561492257888601518255948401946001909101908401614903565b508582101561495e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f6149806060830186613feb565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff8181168382160190808211156146885761468861463a565b808201808211156147f0576147f061463a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614a3f575f80fd5b9190910192915050565b5f60808236031215614a59575f80fd5b614a6161417c565b823567ffffffffffffffff811115614a77575f80fd5b614a8336828601614239565b825250602083013560208201526040830135614a9e81614078565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103614ad057614ad061463a565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b0a57614b0a61463a565b5060010190565b80820281158282048414176147f0576147f061463a565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152614b7e60c0830184613feb565b98975050505050505050565b61ffff8181168382160190808211156146885761468861463a565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614c0d816003860160208c01613fc9565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614c50816017840160208b01613fc9565b808201915050818660f81b16601782015284519150614c76826018830160208801613fc9565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751614cef816003860160208c01613fc9565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614d32816017840160208b01613fc9565b808201915050818660f01b16601782015284519150614d58826019830160208801613fc9565b016019019998505050505050505050565b5f8651614d7a818460208b01613fc9565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b5f60808284031215614dd4575f80fd5b614ddc61417c565b82358152602083013560208201526040830135614df881614078565b60408201526060928301359281019290925250919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b838152604060208201525f61479c604083018486614e10565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201525f614eb4606083018486614e10565b9695505050505050565b5f8251614a3f818460208701613fc956fea2646970667358221220afc20b00ef4889deeb5eada329ef176775231f092c36162bd0e46f54f3842def64736f6c63430008140033", + "bytecode": "0x61010060405234801562000011575f80fd5b50604051620050f3380380620050f383398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e051614f12620001e15f395f818161053b01528181610b3801528181610ca401528181610eec0152818161126e015281816117d201528181611c2101528181611d16015281816128f8015281816129770152818161299901528181612b3501528181612d4001528181612e0501528181613af901528181613b7201528181613b940152613c3c01525f81816106dc01528181611ee001528181611fe801528181612433015281816131f3015281816132c8015261364701525f8181610798015281816110e5015281816124af01528181612f4d01526136c301525f81816107f0015281816108cd01528181611c6a01528181612a450152612f220152614f125ff3fe608060405234801561000f575f80fd5b506004361061030e575f3560e01c80637a5460c51161019d578063c89e42df116100e8578063e46761c411610093578063eaeb077b1161006e578063eaeb077b14610846578063f35dda4714610859578063f851a44014610861575f80fd5b8063e46761c4146107eb578063e57a0b4c14610812578063e7a7ed0214610832575f80fd5b8063d7bc90ff116100c3578063d7bc90ff146107ba578063db5b0ed7146107c5578063def57e54146107d8575f80fd5b8063c89e42df14610760578063cfa8ed4714610773578063d02103ca14610793575f80fd5b8063a3c573eb11610148578063b0afe15411610123578063b0afe15414610724578063c754c7ed14610730578063c7fffd4b14610758575f80fd5b8063a3c573eb146106d7578063a652f26c146106fe578063ada8f91914610711575f80fd5b806391cafe321161017857806391cafe32146106965780639e001877146106a95780639f26f840146106c4575f80fd5b80637a5460c51461063f5780637cd76b8b1461067b5780638c3d73011461068e575f80fd5b806342308fab1161025d578063542028d5116102085780636e05d2cd116101e35780636e05d2cd146106105780636ff512cc14610619578063712570221461062c575f80fd5b8063542028d5146105e1578063676870d2146105e95780636b8616ce146105f1575f80fd5b80634c21fef3116102385780634c21fef31461055d5780634e4877061461059257806352bdeb6d146105a5575f80fd5b806342308fab146104f557806345605267146104fd57806349b7b80214610536575f80fd5b80632acdc2b6116102bd5780633c351e10116102985780633c351e10146104405780633cbc795b1461046057806340b5de6c1461049d575f80fd5b80632acdc2b6146103f85780632c111c061461040d57806332c2d1531461042d575f80fd5b8063107bf28c116102ed578063107bf28c1461039157806311e892d41461039957806326782247146103b3575f80fd5b8062d0295d14610312578063035089631461032d57806305835f3714610348575b5f80fd5b61031a610886565b6040519081526020015b60405180910390f35b610335602081565b60405161ffff9091168152602001610324565b6103846040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103249190614046565b61038461098c565b6103a160f981565b60405160ff9091168152602001610324565b6001546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610324565b61040b61040636600461406f565b610a18565b005b6008546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b61040b61043b3660046140d6565b610b36565b6009546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104889074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610324565b6104c47fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610324565b61031a602481565b60075461051d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610324565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546105829074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610324565b61040b6105a0366004614115565b610c05565b6103846040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610384610e14565b610335601f81565b61031a6105ff366004614115565b60066020525f908152604090205481565b61031a60055481565b61040b610627366004614130565b610e21565b61040b61063a366004614298565b610eea565b6103846040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040b610689366004614130565b6114a3565b61040b61156c565b61040b6106a4366004614130565b61163e565b6103d373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040b6106d2366004614387565b611756565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61038461070c3660046143c6565b611de2565b61040b61071f366004614130565b6121c0565b61031a6405ca1ab1e081565b60075461051d90700100000000000000000000000000000000900467ffffffffffffffff1681565b6103a160e481565b61040b61076e366004614437565b612289565b6002546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61031a635ca1ab1e81565b61040b6107d33660046144a7565b61231b565b61040b6107e6366004614570565b612c61565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60075461051d9067ffffffffffffffff1681565b61040b6108543660046145e8565b612cc9565b6103a1601b81565b5f546103d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109369190614630565b6007549091505f906109609067ffffffffffffffff68010000000000000000820481169116614674565b67ffffffffffffffff169050805f0361097b575f9250505090565b610985818361469c565b9250505090565b60048054610999906146d4565b80601f01602080910402602001604051908101604052809291908181526020018280546109c5906146d4565b8015610a105780601f106109e757610100808354040283529160200191610a10565b820191905f5260205f20905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a6e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c5474010000000000000000000000000000000000000000900460ff16151581151503610ac8576040517f5f0e7abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515021790556040517ff32a0473f809a720a4f8af1e50d353f1caf7452030626fdaac4273f5e6587f41905f90a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610ba5576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610bf891815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c5b576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ca2576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614725565b610d905760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610d90576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b60038054610999906146d4565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610e77576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610e09565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610f59576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610f7757505f54600160ff909116105b80610f905750303b158015610f9057505f5460ff166001145b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107d575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f61108785613190565b6009549091505f906110d190889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611de2565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111709190614630565b90505f808483858f611183600143614740565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156112c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ed9190614759565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161137d91906147b9565b50600461138a89826147b9565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161142a939291906148d1565b60405180910390a1505050505050801561149a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146114f9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd331bd4c4cd1afecb94a225184bded161ff3213624ba4fb58c4f30c5a861144a90602001610e09565b60015473ffffffffffffffffffffffffffffffffffffffff1633146115bd576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611694576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166116e3576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610e09565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611794575073ffffffffffffffffffffffffffffffffffffffff81163314155b156117cb576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185d9190614759565b611867919061490f565b67ffffffffffffffff1611156118a9576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036118e4576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611920576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161194891849168010000000000000000900416614930565b1115611980576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611c1b575f8787838181106119bb576119bb614943565b90506020028101906119cd9190614970565b6119d6906149ac565b9050836119e281614a17565b825180516020918201208185015160408087015160608801519151959a509295505f94611a4e948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611ad6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611afa600188614740565b8403611b695742600760109054906101000a900467ffffffffffffffff168460400151611b27919061490f565b67ffffffffffffffff161115611b69576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611c1390614a3d565b9150506119a0565b50611c917f000000000000000000000000000000000000000000000000000000000000000084611c49610886565b611c539190614a74565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906133f2565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d62908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da29190614759565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611e1496959493929190614a8b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611f645760f9601f8351611ea89190614aed565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611f4e9796959493929190614b08565b6040516020818303038152906040529050612068565b815161ffff1015611fa1576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611fb0602083614aed565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016120559796959493929190614bea565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156120c6573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661213e576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121839084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614ccc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612216576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610e09565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146122df576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036122eb82826147b9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610e099190614046565b60025473ffffffffffffffffffffffffffffffffffffffff16331461236c576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f8190036123a7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156123e3576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ee602442614930565b8667ffffffffffffffff161115612431576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612496575f80fd5b505af11580156124a8573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612516573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253a9190614630565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f805b8681101561286b575f8e8e8381811061257957612579614943565b90506080020180360381019061258f9190614d27565b604081015190915067ffffffffffffffff161561277c57856125b081614a17565b9650505f815f01518260200151836040015184606001516040516020016126159493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f9081526006909352912054909150811461269d576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85825f0151836020015184604001518f8660600151604051602001612736969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b60405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612858565b8051604051612798918591602001918252602082015260400190565b60405160208183030381529060405280519060200120925084815f0151888f8e5f801b60405160200161283f969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b6040516020818303038152906040528051906020012094505b508061286381614a3d565b91505061255e565b5060075467ffffffffffffffff90811690851611156128b6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058390558567ffffffffffffffff8581169084161461296b575f6128db8487614674565b90506128f167ffffffffffffffff821683614740565b915061292a7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c49610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8816021790555b8015612af457612a6d337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a249190614630565b612a2e9190614a74565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906134cb565b603c546040517f3b51be4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633b51be4b90612ac79085908d908d90600401614dba565b5f6040518083038186803b158015612add575f80fd5b505afa158015612aef573d5f803e3d5ffd5b505050505b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018590525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612b90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb49190614759565b9050612bc08882614674565b67ffffffffffffffff168c67ffffffffffffffff1614612c0c576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612c4891815260200190565b60405180910390a2505050505050505050505050505050565b603c5474010000000000000000000000000000000000000000900460ff16612cb5576040517f821935b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc2858585858561352f565b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612d07575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612d3e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614725565b15612e02576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e909190614630565b905082811115612ecc576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612f08576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f4a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846134cb565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd89190614630565b6007805491925067ffffffffffffffff909116905f612ff683614a17565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161302d929190614ddc565b6040519081900390208142613043600143614740565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303613139576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2613188565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061317f90849033908b908b90614deb565b60405180910390a25b505050505050565b606073ffffffffffffffffffffffffffffffffffffffff8216156133ed576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015613237573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327c9190810190614e2a565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa15801561330e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133329190614e93565b915091508163ffffffff165f146133a9576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556133ea565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526134c69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d65565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135299085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613444565b50505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314613580576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036135bb576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156135f7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613602602442614930565b8467ffffffffffffffff161115613645576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156136aa575f80fd5b505af11580156136bc573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061374e9190614630565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015613a6c575f8b8b8381811061378c5761378c614943565b905060200281019061379e9190614970565b6137a7906149ac565b8051805160209091012060408201519192509067ffffffffffffffff161561398757856137d381614a17565b9650505f818360200151846040015185606001516040516020016138359493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146138bd576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550613a57565b8151516201d4c010156139c6576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080613a6490614a3d565b915050613771565b5060075467ffffffffffffffff9081169084161115613ab7576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614613b6c575f613adc8386614674565b9050613af267ffffffffffffffff821683614740565b9150613b2b7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c49610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b613bfb337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d5f803e3d5ffd5b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015613c97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cbb9190614759565b9050613cc78782614674565b67ffffffffffffffff168967ffffffffffffffff1614613d13576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051613d4f91815260200190565b60405180910390a2505050505050505050505050565b5f613dc6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e709092919063ffffffff16565b8051909150156134c65780806020019051810190613de49190614725565b6134c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611018565b60606121b884845f85855f808673ffffffffffffffffffffffffffffffffffffffff168587604051613ea29190614ecb565b5f6040518083038185875af1925050503d805f8114613edc576040519150601f19603f3d011682016040523d82523d5f602084013e613ee1565b606091505b5091509150613ef287838387613efd565b979650505050505050565b60608315613f925782515f03613f8b5773ffffffffffffffffffffffffffffffffffffffff85163b613f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611018565b50816121b8565b6121b88383815115613fa75781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189190614046565b5f5b83811015613ff5578181015183820152602001613fdd565b50505f910152565b5f8151808452614014816020860160208601613fdb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6140586020830184613ffd565b9392505050565b801515811461406c575f80fd5b50565b5f6020828403121561407f575f80fd5b81356140588161405f565b67ffffffffffffffff8116811461406c575f80fd5b80356133ed8161408a565b73ffffffffffffffffffffffffffffffffffffffff8116811461406c575f80fd5b80356133ed816140aa565b5f805f606084860312156140e8575f80fd5b83356140f38161408a565b925060208401359150604084013561410a816140aa565b809150509250925092565b5f60208284031215614125575f80fd5b81356140588161408a565b5f60208284031215614140575f80fd5b8135614058816140aa565b63ffffffff8116811461406c575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156141ac576141ac61415c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156141f9576141f961415c565b604052919050565b5f67ffffffffffffffff82111561421a5761421a61415c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614255575f80fd5b813561426861426382614201565b6141b2565b81815284602083860101111561427c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156142ad575f80fd5b86356142b8816140aa565b955060208701356142c8816140aa565b945060408701356142d88161414b565b935060608701356142e8816140aa565b9250608087013567ffffffffffffffff80821115614304575f80fd5b6143108a838b01614246565b935060a0890135915080821115614325575f80fd5b5061433289828a01614246565b9150509295509295509295565b5f8083601f84011261434f575f80fd5b50813567ffffffffffffffff811115614366575f80fd5b6020830191508360208260051b8501011115614380575f80fd5b9250929050565b5f8060208385031215614398575f80fd5b823567ffffffffffffffff8111156143ae575f80fd5b6143ba8582860161433f565b90969095509350505050565b5f805f80608085870312156143d9575f80fd5b84356143e48161414b565b935060208501356143f4816140aa565b925060408501356144048161414b565b9150606085013567ffffffffffffffff81111561441f575f80fd5b61442b87828801614246565b91505092959194509250565b5f60208284031215614447575f80fd5b813567ffffffffffffffff81111561445d575f80fd5b6121b884828501614246565b5f8083601f840112614479575f80fd5b50813567ffffffffffffffff811115614490575f80fd5b602083019150836020828501011115614380575f80fd5b5f805f805f805f60a0888a0312156144bd575f80fd5b873567ffffffffffffffff808211156144d4575f80fd5b818a0191508a601f8301126144e7575f80fd5b8135818111156144f5575f80fd5b8b60208260071b8501011115614509575f80fd5b6020830199508098505061451f60208b0161409f565b965061452d60408b0161409f565b955061453b60608b016140cb565b945060808a0135915080821115614550575f80fd5b5061455d8a828b01614469565b989b979a50959850939692959293505050565b5f805f805f60808688031215614584575f80fd5b853567ffffffffffffffff81111561459a575f80fd5b6145a68882890161433f565b90965094505060208601356145ba8161408a565b925060408601356145ca8161408a565b915060608601356145da816140aa565b809150509295509295909350565b5f805f604084860312156145fa575f80fd5b833567ffffffffffffffff811115614610575f80fd5b61461c86828701614469565b909790965060209590950135949350505050565b5f60208284031215614640575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561469557614695614647565b5092915050565b5f826146cf577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806146e857607f821691505b60208210810361471f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614735575f80fd5b81516140588161405f565b8181038181111561475357614753614647565b92915050565b5f60208284031215614769575f80fd5b81516140588161408a565b601f8211156134c6575f81815260208120601f850160051c8101602086101561479a5750805b601f850160051c820191505b81811015613188578281556001016147a6565b815167ffffffffffffffff8111156147d3576147d361415c565b6147e7816147e184546146d4565b84614774565b602080601f831160018114614839575f84156148035750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613188565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561488557888601518255948401946001909101908401614866565b50858210156148c157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f6148e36060830186613ffd565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561469557614695614647565b8082018082111561475357614753614647565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126149a2575f80fd5b9190910192915050565b5f608082360312156149bc575f80fd5b6149c4614189565b823567ffffffffffffffff8111156149da575f80fd5b6149e636828601614246565b825250602083013560208201526040830135614a018161408a565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103614a3357614a33614647565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6d57614a6d614647565b5060010190565b808202811582820484141761475357614753614647565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152614ae160c0830184613ffd565b98975050505050505050565b61ffff81811683821601908082111561469557614695614647565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614b70816003860160208c01613fdb565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614bb3816017840160208b01613fdb565b808201915050818660f81b16601782015284519150614bd9826018830160208801613fdb565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751614c52816003860160208c01613fdb565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614c95816017840160208b01613fdb565b808201915050818660f01b16601782015284519150614cbb826019830160208801613fdb565b016019019998505050505050505050565b5f8651614cdd818460208b01613fdb565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b5f60808284031215614d37575f80fd5b614d3f614189565b82358152602083013560208201526040830135614d5b8161408a565b60408201526060928301359281019290925250919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b838152604060208201525f614dd3604083018486614d73565b95945050505050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201525f614e20606083018486614d73565b9695505050505050565b5f60208284031215614e3a575f80fd5b815167ffffffffffffffff811115614e50575f80fd5b8201601f81018413614e60575f80fd5b8051614e6e61426382614201565b818152856020838501011115614e82575f80fd5b614dd3826020830160208601613fdb565b5f8060408385031215614ea4575f80fd5b8251614eaf8161414b565b6020840151909250614ec0816140aa565b809150509250929050565b5f82516149a2818460208701613fdb56fea264697066735822122085d6102c7b102508ac302be4996dd1d95adaef2c7433f342bc0b8f96d63fde2064736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061030e575f3560e01c80637a5460c51161019d578063c89e42df116100e8578063e46761c411610093578063eaeb077b1161006e578063eaeb077b14610846578063f35dda4714610859578063f851a44014610861575f80fd5b8063e46761c4146107eb578063e57a0b4c14610812578063e7a7ed0214610832575f80fd5b8063d7bc90ff116100c3578063d7bc90ff146107ba578063db5b0ed7146107c5578063def57e54146107d8575f80fd5b8063c89e42df14610760578063cfa8ed4714610773578063d02103ca14610793575f80fd5b8063a3c573eb11610148578063b0afe15411610123578063b0afe15414610724578063c754c7ed14610730578063c7fffd4b14610758575f80fd5b8063a3c573eb146106d7578063a652f26c146106fe578063ada8f91914610711575f80fd5b806391cafe321161017857806391cafe32146106965780639e001877146106a95780639f26f840146106c4575f80fd5b80637a5460c51461063f5780637cd76b8b1461067b5780638c3d73011461068e575f80fd5b806342308fab1161025d578063542028d5116102085780636e05d2cd116101e35780636e05d2cd146106105780636ff512cc14610619578063712570221461062c575f80fd5b8063542028d5146105e1578063676870d2146105e95780636b8616ce146105f1575f80fd5b80634c21fef3116102385780634c21fef31461055d5780634e4877061461059257806352bdeb6d146105a5575f80fd5b806342308fab146104f557806345605267146104fd57806349b7b80214610536575f80fd5b80632acdc2b6116102bd5780633c351e10116102985780633c351e10146104405780633cbc795b1461046057806340b5de6c1461049d575f80fd5b80632acdc2b6146103f85780632c111c061461040d57806332c2d1531461042d575f80fd5b8063107bf28c116102ed578063107bf28c1461039157806311e892d41461039957806326782247146103b3575f80fd5b8062d0295d14610312578063035089631461032d57806305835f3714610348575b5f80fd5b61031a610886565b6040519081526020015b60405180910390f35b610335602081565b60405161ffff9091168152602001610324565b6103846040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103249190614046565b61038461098c565b6103a160f981565b60405160ff9091168152602001610324565b6001546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610324565b61040b61040636600461406f565b610a18565b005b6008546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b61040b61043b3660046140d6565b610b36565b6009546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104889074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610324565b6104c47fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610324565b61031a602481565b60075461051d9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610324565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546105829074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610324565b61040b6105a0366004614115565b610c05565b6103846040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610384610e14565b610335601f81565b61031a6105ff366004614115565b60066020525f908152604090205481565b61031a60055481565b61040b610627366004614130565b610e21565b61040b61063a366004614298565b610eea565b6103846040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040b610689366004614130565b6114a3565b61040b61156c565b61040b6106a4366004614130565b61163e565b6103d373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040b6106d2366004614387565b611756565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61038461070c3660046143c6565b611de2565b61040b61071f366004614130565b6121c0565b61031a6405ca1ab1e081565b60075461051d90700100000000000000000000000000000000900467ffffffffffffffff1681565b6103a160e481565b61040b61076e366004614437565b612289565b6002546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b61031a635ca1ab1e81565b61040b6107d33660046144a7565b61231b565b61040b6107e6366004614570565b612c61565b6103d37f000000000000000000000000000000000000000000000000000000000000000081565b603c546103d39073ffffffffffffffffffffffffffffffffffffffff1681565b60075461051d9067ffffffffffffffff1681565b61040b6108543660046145e8565b612cc9565b6103a1601b81565b5f546103d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109369190614630565b6007549091505f906109609067ffffffffffffffff68010000000000000000820481169116614674565b67ffffffffffffffff169050805f0361097b575f9250505090565b610985818361469c565b9250505090565b60048054610999906146d4565b80601f01602080910402602001604051908101604052809291908181526020018280546109c5906146d4565b8015610a105780601f106109e757610100808354040283529160200191610a10565b820191905f5260205f20905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a6e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c5474010000000000000000000000000000000000000000900460ff16151581151503610ac8576040517f5f0e7abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515021790556040517ff32a0473f809a720a4f8af1e50d353f1caf7452030626fdaac4273f5e6587f41905f90a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610ba5576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610bf891815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c5b576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ca2576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614725565b610d905760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610d90576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b60038054610999906146d4565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610e77576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610e09565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610f59576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610f7757505f54600160ff909116105b80610f905750303b158015610f9057505f5460ff166001145b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107d575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f61108785613190565b6009549091505f906110d190889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611de2565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111709190614630565b90505f808483858f611183600143614740565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156112c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ed9190614759565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161137d91906147b9565b50600461138a89826147b9565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161142a939291906148d1565b60405180910390a1505050505050801561149a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146114f9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd331bd4c4cd1afecb94a225184bded161ff3213624ba4fb58c4f30c5a861144a90602001610e09565b60015473ffffffffffffffffffffffffffffffffffffffff1633146115bd576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611694576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166116e3576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610e09565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611794575073ffffffffffffffffffffffffffffffffffffffff81163314155b156117cb576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185d9190614759565b611867919061490f565b67ffffffffffffffff1611156118a9576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036118e4576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611920576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161194891849168010000000000000000900416614930565b1115611980576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611c1b575f8787838181106119bb576119bb614943565b90506020028101906119cd9190614970565b6119d6906149ac565b9050836119e281614a17565b825180516020918201208185015160408087015160608801519151959a509295505f94611a4e948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611ad6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611afa600188614740565b8403611b695742600760109054906101000a900467ffffffffffffffff168460400151611b27919061490f565b67ffffffffffffffff161115611b69576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611c1390614a3d565b9150506119a0565b50611c917f000000000000000000000000000000000000000000000000000000000000000084611c49610886565b611c539190614a74565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906133f2565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d62908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da29190614759565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611e1496959493929190614a8b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611f645760f9601f8351611ea89190614aed565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611f4e9796959493929190614b08565b6040516020818303038152906040529050612068565b815161ffff1015611fa1576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611fb0602083614aed565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016120559796959493929190614bea565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156120c6573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661213e576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121839084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614ccc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612216576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610e09565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146122df576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036122eb82826147b9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610e099190614046565b60025473ffffffffffffffffffffffffffffffffffffffff16331461236c576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f8190036123a7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156123e3576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ee602442614930565b8667ffffffffffffffff161115612431576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612496575f80fd5b505af11580156124a8573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612516573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253a9190614630565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f805b8681101561286b575f8e8e8381811061257957612579614943565b90506080020180360381019061258f9190614d27565b604081015190915067ffffffffffffffff161561277c57856125b081614a17565b9650505f815f01518260200151836040015184606001516040516020016126159493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f9081526006909352912054909150811461269d576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85825f0151836020015184604001518f8660600151604051602001612736969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b60405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612858565b8051604051612798918591602001918252602082015260400190565b60405160208183030381529060405280519060200120925084815f0151888f8e5f801b60405160200161283f969594939291909586526020860194909452604085019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060808501919091521b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166068830152607c820152609c0190565b6040516020818303038152906040528051906020012094505b508061286381614a3d565b91505061255e565b5060075467ffffffffffffffff90811690851611156128b6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058390558567ffffffffffffffff8581169084161461296b575f6128db8487614674565b90506128f167ffffffffffffffff821683614740565b915061292a7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c49610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8816021790555b8015612af457612a6d337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a249190614630565b612a2e9190614a74565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906134cb565b603c546040517f3b51be4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633b51be4b90612ac79085908d908d90600401614dba565b5f6040518083038186803b158015612add575f80fd5b505afa158015612aef573d5f803e3d5ffd5b505050505b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018590525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612b90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb49190614759565b9050612bc08882614674565b67ffffffffffffffff168c67ffffffffffffffff1614612c0c576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612c4891815260200190565b60405180910390a2505050505050505050505050505050565b603c5474010000000000000000000000000000000000000000900460ff16612cb5576040517f821935b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc2858585858561352f565b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612d07575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612d3e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614725565b15612e02576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e909190614630565b905082811115612ecc576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612f08576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f4a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846134cb565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd89190614630565b6007805491925067ffffffffffffffff909116905f612ff683614a17565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161302d929190614ddc565b6040519081900390208142613043600143614740565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303613139576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2613188565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061317f90849033908b908b90614deb565b60405180910390a25b505050505050565b606073ffffffffffffffffffffffffffffffffffffffff8216156133ed576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015613237573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327c9190810190614e2a565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa15801561330e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133329190614e93565b915091508163ffffffff165f146133a9576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556133ea565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526134c69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d65565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135299085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613444565b50505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314613580576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036135bb576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156135f7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613602602442614930565b8467ffffffffffffffff161115613645576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156136aa575f80fd5b505af11580156136bc573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061374e9190614630565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015613a6c575f8b8b8381811061378c5761378c614943565b905060200281019061379e9190614970565b6137a7906149ac565b8051805160209091012060408201519192509067ffffffffffffffff161561398757856137d381614a17565b9650505f818360200151846040015185606001516040516020016138359493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146138bd576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550613a57565b8151516201d4c010156139c6576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080613a6490614a3d565b915050613771565b5060075467ffffffffffffffff9081169084161115613ab7576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614613b6c575f613adc8386614674565b9050613af267ffffffffffffffff821683614740565b9150613b2b7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c49610886565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b613bfb337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d5f803e3d5ffd5b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015613c97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cbb9190614759565b9050613cc78782614674565b67ffffffffffffffff168967ffffffffffffffff1614613d13576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051613d4f91815260200190565b60405180910390a2505050505050505050505050565b5f613dc6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e709092919063ffffffff16565b8051909150156134c65780806020019051810190613de49190614725565b6134c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611018565b60606121b884845f85855f808673ffffffffffffffffffffffffffffffffffffffff168587604051613ea29190614ecb565b5f6040518083038185875af1925050503d805f8114613edc576040519150601f19603f3d011682016040523d82523d5f602084013e613ee1565b606091505b5091509150613ef287838387613efd565b979650505050505050565b60608315613f925782515f03613f8b5773ffffffffffffffffffffffffffffffffffffffff85163b613f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611018565b50816121b8565b6121b88383815115613fa75781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189190614046565b5f5b83811015613ff5578181015183820152602001613fdd565b50505f910152565b5f8151808452614014816020860160208601613fdb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6140586020830184613ffd565b9392505050565b801515811461406c575f80fd5b50565b5f6020828403121561407f575f80fd5b81356140588161405f565b67ffffffffffffffff8116811461406c575f80fd5b80356133ed8161408a565b73ffffffffffffffffffffffffffffffffffffffff8116811461406c575f80fd5b80356133ed816140aa565b5f805f606084860312156140e8575f80fd5b83356140f38161408a565b925060208401359150604084013561410a816140aa565b809150509250925092565b5f60208284031215614125575f80fd5b81356140588161408a565b5f60208284031215614140575f80fd5b8135614058816140aa565b63ffffffff8116811461406c575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156141ac576141ac61415c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156141f9576141f961415c565b604052919050565b5f67ffffffffffffffff82111561421a5761421a61415c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614255575f80fd5b813561426861426382614201565b6141b2565b81815284602083860101111561427c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156142ad575f80fd5b86356142b8816140aa565b955060208701356142c8816140aa565b945060408701356142d88161414b565b935060608701356142e8816140aa565b9250608087013567ffffffffffffffff80821115614304575f80fd5b6143108a838b01614246565b935060a0890135915080821115614325575f80fd5b5061433289828a01614246565b9150509295509295509295565b5f8083601f84011261434f575f80fd5b50813567ffffffffffffffff811115614366575f80fd5b6020830191508360208260051b8501011115614380575f80fd5b9250929050565b5f8060208385031215614398575f80fd5b823567ffffffffffffffff8111156143ae575f80fd5b6143ba8582860161433f565b90969095509350505050565b5f805f80608085870312156143d9575f80fd5b84356143e48161414b565b935060208501356143f4816140aa565b925060408501356144048161414b565b9150606085013567ffffffffffffffff81111561441f575f80fd5b61442b87828801614246565b91505092959194509250565b5f60208284031215614447575f80fd5b813567ffffffffffffffff81111561445d575f80fd5b6121b884828501614246565b5f8083601f840112614479575f80fd5b50813567ffffffffffffffff811115614490575f80fd5b602083019150836020828501011115614380575f80fd5b5f805f805f805f60a0888a0312156144bd575f80fd5b873567ffffffffffffffff808211156144d4575f80fd5b818a0191508a601f8301126144e7575f80fd5b8135818111156144f5575f80fd5b8b60208260071b8501011115614509575f80fd5b6020830199508098505061451f60208b0161409f565b965061452d60408b0161409f565b955061453b60608b016140cb565b945060808a0135915080821115614550575f80fd5b5061455d8a828b01614469565b989b979a50959850939692959293505050565b5f805f805f60808688031215614584575f80fd5b853567ffffffffffffffff81111561459a575f80fd5b6145a68882890161433f565b90965094505060208601356145ba8161408a565b925060408601356145ca8161408a565b915060608601356145da816140aa565b809150509295509295909350565b5f805f604084860312156145fa575f80fd5b833567ffffffffffffffff811115614610575f80fd5b61461c86828701614469565b909790965060209590950135949350505050565b5f60208284031215614640575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561469557614695614647565b5092915050565b5f826146cf577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806146e857607f821691505b60208210810361471f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614735575f80fd5b81516140588161405f565b8181038181111561475357614753614647565b92915050565b5f60208284031215614769575f80fd5b81516140588161408a565b601f8211156134c6575f81815260208120601f850160051c8101602086101561479a5750805b601f850160051c820191505b81811015613188578281556001016147a6565b815167ffffffffffffffff8111156147d3576147d361415c565b6147e7816147e184546146d4565b84614774565b602080601f831160018114614839575f84156148035750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613188565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561488557888601518255948401946001909101908401614866565b50858210156148c157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f6148e36060830186613ffd565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561469557614695614647565b8082018082111561475357614753614647565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126149a2575f80fd5b9190910192915050565b5f608082360312156149bc575f80fd5b6149c4614189565b823567ffffffffffffffff8111156149da575f80fd5b6149e636828601614246565b825250602083013560208201526040830135614a018161408a565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103614a3357614a33614647565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6d57614a6d614647565b5060010190565b808202811582820484141761475357614753614647565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152614ae160c0830184613ffd565b98975050505050505050565b61ffff81811683821601908082111561469557614695614647565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614b70816003860160208c01613fdb565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614bb3816017840160208b01613fdb565b808201915050818660f81b16601782015284519150614bd9826018830160208801613fdb565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751614c52816003860160208c01613fdb565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614c95816017840160208b01613fdb565b808201915050818660f01b16601782015284519150614cbb826019830160208801613fdb565b016019019998505050505050505050565b5f8651614cdd818460208b01613fdb565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b5f60808284031215614d37575f80fd5b614d3f614189565b82358152602083013560208201526040830135614d5b8161408a565b60408201526060928301359281019290925250919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b838152604060208201525f614dd3604083018486614d73565b95945050505050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201525f614e20606083018486614d73565b9695505050505050565b5f60208284031215614e3a575f80fd5b815167ffffffffffffffff811115614e50575f80fd5b8201601f81018413614e60575f80fd5b8051614e6e61426382614201565b818152856020838501011115614e82575f80fd5b614dd3826020830160208601613fdb565b5f8060408385031215614ea4575f80fd5b8251614eaf8161414b565b6020840151909250614ec0816140aa565b809150509250929050565b5f82516149a2818460208701613fdb56fea264697066735822122085d6102c7b102508ac302be4996dd1d95adaef2c7433f342bc0b8f96d63fde2064736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMEtrog.json b/compiled-contracts/PolygonZkEVMEtrog.json index 174b2e72e..55c1adc96 100644 --- a/compiled-contracts/PolygonZkEVMEtrog.json +++ b/compiled-contracts/PolygonZkEVMEtrog.json @@ -1168,8 +1168,8 @@ "type": "function" } ], - "bytecode": "0x61010060405234801562000011575f80fd5b50604051620043293803806200432983398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e051614172620001b75f395f81816104f10152818161095501528181610ac101528181610d09015281816112db0152818161177601528181611bc501528181611cba01528181612889015281816129020152818161292401528181612a3901528181612bd90152612c9e01525f818161064a01528181610efd01528181610fd201528181611e8401528181611f8c01526123d701525f818161070601528181611152015281816124530152612de601525f818161074b0152818161080801528181611c0e015281816129d00152612dbb01526141725ff3fe608060405234801561000f575f80fd5b50600436106102d7575f3560e01c80637125702211610187578063c7fffd4b116100dd578063def57e5411610093578063eaeb077b1161006e578063eaeb077b14610781578063f35dda4714610794578063f851a4401461079c575f80fd5b8063def57e5414610733578063e46761c414610746578063e7a7ed021461076d575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff14610728575f80fd5b8063c7fffd4b146106c6578063c89e42df146106ce575f80fd5b80639f26f8401161013d578063ada8f91911610118578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e575f80fd5b80639f26f84014610632578063a3c573eb14610645578063a652f26c1461066c575f80fd5b80638c3d73011161016d5780638c3d7301146105fc57806391cafe32146106045780639e00187714610617575f80fd5b806371257022146105ad5780637a5460c5146105c0575f80fd5b806340b5de6c1161023c57806352bdeb6d116101f25780636b8616ce116101cd5780636b8616ce146105725780636e05d2cd146105915780636ff512cc1461059a575f80fd5b806352bdeb6d14610526578063542028d514610562578063676870d21461056a575f80fd5b8063456052671161022257806345605267146104b357806349b7b802146104ec5780634e48770614610513575f80fd5b806340b5de6c1461045357806342308fab146104ab575f80fd5b8063267822471161029157806332c2d1531161027757806332c2d153146103e15780633c351e10146103f65780633cbc795b14610416575f80fd5b8063267822471461037c5780632c111c06146103c1575f80fd5b806305835f37116102c157806305835f3714610311578063107bf28c1461035a57806311e892d414610362575f80fd5b8062d0295d146102db57806303508963146102f6575b5f80fd5b6102e36107c1565b6040519081526020015b60405180910390f35b6102fe602081565b60405161ffff90911681526020016102ed565b61034d6040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102ed9190613447565b61034d6108c7565b61036a60f981565b60405160ff90911681526020016102ed565b60015461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ed565b60085461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103f46103ef366004613499565b610953565b005b60095461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60095461043e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102ed565b61047a7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102ed565b6102e3602481565b6007546104d39068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102ed565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6103f46105213660046134d8565b610a22565b61034d6040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b61034d610c31565b6102fe601f81565b6102e36105803660046134d8565b60066020525f908152604090205481565b6102e360055481565b6103f46105a83660046134f3565b610c3e565b6103f46105bb366004613632565b610d07565b61034d6040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103f4611510565b6103f46106123660046134f3565b6115e2565b61039c73a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103f4610640366004613721565b6116fa565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b61034d61067a366004613760565b611d86565b6103f461068d3660046134f3565b612164565b6102e36405ca1ab1e081565b6007546104d390700100000000000000000000000000000000900467ffffffffffffffff1681565b61036a60e481565b6103f46106dc3660046137d1565b61222d565b60025461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3635ca1ab1e81565b6103f4610741366004613803565b6122bf565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d39067ffffffffffffffff1681565b6103f461078f36600461387b565b612b62565b61036a601b81565b5f5461039c9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561084d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087191906138ec565b6007549091505f9061089b9067ffffffffffffffff68010000000000000000820481169116613930565b67ffffffffffffffff169050805f036108b6575f9250505090565b6108c08183613958565b9250505090565b600480546108d490613990565b80601f016020809104026020016040519081016040528092919081815260200182805461090090613990565b801561094b5780601f106109225761010080835404028352916020019161094b565b820191905f5260205f20905b81548152906001019060200180831161092e57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109c2576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1591815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a78576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610abf576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4c91906139e1565b610bad5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bad576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108d490613990565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c94576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c26565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d76576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d9457505f54600160ff909116105b80610dad5750303b158015610dad57505f5460ff166001145b610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e9a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110f7576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f869190810190613a00565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611018573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103c9190613a72565b915091508163ffffffff165f146110b3576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110f4565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061113e90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d86565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111dd91906138ec565b90505f808483858f6111f0600143613aaa565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611336573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135a9190613ac3565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113ea9190613b23565b5060046113f78982613b23565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161149793929190613c3b565b60405180910390a15050505050508015611507575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611561576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611638576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611687576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c26565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611738575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561176f576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118019190613ac3565b61180b9190613c79565b67ffffffffffffffff16111561184d576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611888576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118c4576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118ec91849168010000000000000000900416613c9a565b1115611924576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bbf575f87878381811061195f5761195f613cad565b90506020028101906119719190613cda565b61197a90613d16565b90508361198681613d9c565b825180516020918201208185015160408087015160608801519151959a509295505f946119f2948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a7a576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a9e600188613aaa565b8403611b0d5742600760109054906101000a900467ffffffffffffffff168460400151611acb9190613c79565b67ffffffffffffffff161115611b0d576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611bb790613dc2565b915050611944565b50611c357f000000000000000000000000000000000000000000000000000000000000000084611bed6107c1565b611bf79190613df9565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190613029565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d06908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d469190613ac3565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611db896959493929190613e10565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611f085760f9601f8351611e4c9190613e72565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611ef29796959493929190613e8d565b604051602081830303815290604052905061200c565b815161ffff1015611f45576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f54602083613e72565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611ff99796959493929190613f6f565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa15801561206a573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120e2576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121279084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614051565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121ba576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c26565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612283576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361228f8282613b23565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c269190613447565b60025473ffffffffffffffffffffffffffffffffffffffff163314612310576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f81900361234b576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612387576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612392602442613c9a565b8467ffffffffffffffff1611156123d5576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561243a575f80fd5b505af115801561244c573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de91906138ec565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b858110156127fc575f8b8b8381811061251c5761251c613cad565b905060200281019061252e9190613cda565b61253790613d16565b8051805160209091012060408201519192509067ffffffffffffffff1615612717578561256381613d9c565b9650505f818360200151846040015185606001516040516020016125c59493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f9081526006909352912054909150811461264d576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9055506127e7565b8151516201d4c01015612756576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b505080806127f490613dc2565b915050612501565b5060075467ffffffffffffffff9081169084161115612847576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff848116908316146128fc575f61286c8386613930565b905061288267ffffffffffffffff821683613aaa565b91506128bb7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bed6107c1565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b6129f8337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129af91906138ec565b6129b99190613df9565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190613102565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab89190613ac3565b9050612ac48782613930565b67ffffffffffffffff168967ffffffffffffffff1614612b10576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051612b4c91815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612ba0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612bd7576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6491906139e1565b15612c9b576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2991906138ec565b905082811115612d65576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612da1576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612de373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084613102565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e7191906138ec565b6007805491925067ffffffffffffffff909116905f612e8f83613d9c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612ec69291906140ac565b6040519081900390208142612edc600143613aaa565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303612fd2576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2613021565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061301890849033908b908b906140bb565b60405180910390a25b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130fd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613166565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131609085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161307b565b50505050565b5f6131c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132719092919063ffffffff16565b8051909150156130fd57808060200190518101906131e591906139e1565b6130fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e35565b606061215c84845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516132a3919061412b565b5f6040518083038185875af1925050503d805f81146132dd576040519150601f19603f3d011682016040523d82523d5f602084013e6132e2565b606091505b50915091506132f3878383876132fe565b979650505050505050565b606083156133935782515f0361338c5773ffffffffffffffffffffffffffffffffffffffff85163b61338c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e35565b508161215c565b61215c83838151156133a85781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359190613447565b5f5b838110156133f65781810151838201526020016133de565b50505f910152565b5f81518084526134158160208601602086016133dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61345960208301846133fe565b9392505050565b67ffffffffffffffff81168114613475575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613475575f80fd5b5f805f606084860312156134ab575f80fd5b83356134b681613460565b92506020840135915060408401356134cd81613478565b809150509250925092565b5f602082840312156134e8575f80fd5b813561345981613460565b5f60208284031215613503575f80fd5b813561345981613478565b63ffffffff81168114613475575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135935761359361351f565b604052919050565b5f67ffffffffffffffff8211156135b4576135b461351f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126135ef575f80fd5b81356136026135fd8261359b565b61354c565b818152846020838601011115613616575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613647575f80fd5b863561365281613478565b9550602087013561366281613478565b945060408701356136728161350e565b9350606087013561368281613478565b9250608087013567ffffffffffffffff8082111561369e575f80fd5b6136aa8a838b016135e0565b935060a08901359150808211156136bf575f80fd5b506136cc89828a016135e0565b9150509295509295509295565b5f8083601f8401126136e9575f80fd5b50813567ffffffffffffffff811115613700575f80fd5b6020830191508360208260051b850101111561371a575f80fd5b9250929050565b5f8060208385031215613732575f80fd5b823567ffffffffffffffff811115613748575f80fd5b613754858286016136d9565b90969095509350505050565b5f805f8060808587031215613773575f80fd5b843561377e8161350e565b9350602085013561378e81613478565b9250604085013561379e8161350e565b9150606085013567ffffffffffffffff8111156137b9575f80fd5b6137c5878288016135e0565b91505092959194509250565b5f602082840312156137e1575f80fd5b813567ffffffffffffffff8111156137f7575f80fd5b61215c848285016135e0565b5f805f805f60808688031215613817575f80fd5b853567ffffffffffffffff81111561382d575f80fd5b613839888289016136d9565b909650945050602086013561384d81613460565b9250604086013561385d81613460565b9150606086013561386d81613478565b809150509295509295909350565b5f805f6040848603121561388d575f80fd5b833567ffffffffffffffff808211156138a4575f80fd5b818601915086601f8301126138b7575f80fd5b8135818111156138c5575f80fd5b8760208285010111156138d6575f80fd5b6020928301989097509590910135949350505050565b5f602082840312156138fc575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561395157613951613903565b5092915050565b5f8261398b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806139a457607f821691505b6020821081036139db577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156139f1575f80fd5b81518015158114613459575f80fd5b5f60208284031215613a10575f80fd5b815167ffffffffffffffff811115613a26575f80fd5b8201601f81018413613a36575f80fd5b8051613a446135fd8261359b565b818152856020838501011115613a58575f80fd5b613a698260208301602086016133dc565b95945050505050565b5f8060408385031215613a83575f80fd5b8251613a8e8161350e565b6020840151909250613a9f81613478565b809150509250929050565b81810381811115613abd57613abd613903565b92915050565b5f60208284031215613ad3575f80fd5b815161345981613460565b601f8211156130fd575f81815260208120601f850160051c81016020861015613b045750805b601f850160051c820191505b8181101561302157828155600101613b10565b815167ffffffffffffffff811115613b3d57613b3d61351f565b613b5181613b4b8454613990565b84613ade565b602080601f831160018114613ba3575f8415613b6d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613021565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bef57888601518255948401946001909101908401613bd0565b5085821015613c2b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613c4d60608301866133fe565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561395157613951613903565b80820180821115613abd57613abd613903565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613d0c575f80fd5b9190910192915050565b5f60808236031215613d26575f80fd5b6040516080810167ffffffffffffffff8282108183111715613d4a57613d4a61351f565b816040528435915080821115613d5e575f80fd5b50613d6b368286016135e0565b825250602083013560208201526040830135613d8681613460565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613db857613db8613903565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613df257613df2613903565b5060010190565b8082028115828204841417613abd57613abd613903565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613e6660c08301846133fe565b98975050505050505050565b61ffff81811683821601908082111561395157613951613903565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613ef5816003860160208c016133dc565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f38816017840160208b016133dc565b808201915050818660f81b16601782015284519150613f5e8260188301602088016133dc565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613fd7816003860160208c016133dc565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b166003820152865161401a816017840160208b016133dc565b808201915050818660f01b166017820152845191506140408260198301602088016133dc565b016019019998505050505050505050565b5f8651614062818460208b016133dc565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613d0c8184602087016133dc56fea26469706673582212204199bee75172b6df87456fbd3d395b9339cfeb50c9ce237e7bfa7cdbbc43d07364736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102d7575f3560e01c80637125702211610187578063c7fffd4b116100dd578063def57e5411610093578063eaeb077b1161006e578063eaeb077b14610781578063f35dda4714610794578063f851a4401461079c575f80fd5b8063def57e5414610733578063e46761c414610746578063e7a7ed021461076d575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff14610728575f80fd5b8063c7fffd4b146106c6578063c89e42df146106ce575f80fd5b80639f26f8401161013d578063ada8f91911610118578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e575f80fd5b80639f26f84014610632578063a3c573eb14610645578063a652f26c1461066c575f80fd5b80638c3d73011161016d5780638c3d7301146105fc57806391cafe32146106045780639e00187714610617575f80fd5b806371257022146105ad5780637a5460c5146105c0575f80fd5b806340b5de6c1161023c57806352bdeb6d116101f25780636b8616ce116101cd5780636b8616ce146105725780636e05d2cd146105915780636ff512cc1461059a575f80fd5b806352bdeb6d14610526578063542028d514610562578063676870d21461056a575f80fd5b8063456052671161022257806345605267146104b357806349b7b802146104ec5780634e48770614610513575f80fd5b806340b5de6c1461045357806342308fab146104ab575f80fd5b8063267822471161029157806332c2d1531161027757806332c2d153146103e15780633c351e10146103f65780633cbc795b14610416575f80fd5b8063267822471461037c5780632c111c06146103c1575f80fd5b806305835f37116102c157806305835f3714610311578063107bf28c1461035a57806311e892d414610362575f80fd5b8062d0295d146102db57806303508963146102f6575b5f80fd5b6102e36107c1565b6040519081526020015b60405180910390f35b6102fe602081565b60405161ffff90911681526020016102ed565b61034d6040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102ed9190613447565b61034d6108c7565b61036a60f981565b60405160ff90911681526020016102ed565b60015461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ed565b60085461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103f46103ef366004613499565b610953565b005b60095461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60095461043e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102ed565b61047a7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102ed565b6102e3602481565b6007546104d39068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102ed565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6103f46105213660046134d8565b610a22565b61034d6040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b61034d610c31565b6102fe601f81565b6102e36105803660046134d8565b60066020525f908152604090205481565b6102e360055481565b6103f46105a83660046134f3565b610c3e565b6103f46105bb366004613632565b610d07565b61034d6040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103f4611510565b6103f46106123660046134f3565b6115e2565b61039c73a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103f4610640366004613721565b6116fa565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b61034d61067a366004613760565b611d86565b6103f461068d3660046134f3565b612164565b6102e36405ca1ab1e081565b6007546104d390700100000000000000000000000000000000900467ffffffffffffffff1681565b61036a60e481565b6103f46106dc3660046137d1565b61222d565b60025461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3635ca1ab1e81565b6103f4610741366004613803565b6122bf565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d39067ffffffffffffffff1681565b6103f461078f36600461387b565b612b62565b61036a601b81565b5f5461039c9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561084d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087191906138ec565b6007549091505f9061089b9067ffffffffffffffff68010000000000000000820481169116613930565b67ffffffffffffffff169050805f036108b6575f9250505090565b6108c08183613958565b9250505090565b600480546108d490613990565b80601f016020809104026020016040519081016040528092919081815260200182805461090090613990565b801561094b5780601f106109225761010080835404028352916020019161094b565b820191905f5260205f20905b81548152906001019060200180831161092e57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109c2576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1591815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a78576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610abf576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4c91906139e1565b610bad5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bad576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108d490613990565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c94576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c26565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d76576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d9457505f54600160ff909116105b80610dad5750303b158015610dad57505f5460ff166001145b610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e9a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110f7576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f869190810190613a00565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611018573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103c9190613a72565b915091508163ffffffff165f146110b3576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110f4565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061113e90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d86565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111dd91906138ec565b90505f808483858f6111f0600143613aaa565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611336573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135a9190613ac3565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113ea9190613b23565b5060046113f78982613b23565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161149793929190613c3b565b60405180910390a15050505050508015611507575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611561576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611638576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611687576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c26565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611738575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561176f576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118019190613ac3565b61180b9190613c79565b67ffffffffffffffff16111561184d576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611888576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118c4576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118ec91849168010000000000000000900416613c9a565b1115611924576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bbf575f87878381811061195f5761195f613cad565b90506020028101906119719190613cda565b61197a90613d16565b90508361198681613d9c565b825180516020918201208185015160408087015160608801519151959a509295505f946119f2948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a7a576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a9e600188613aaa565b8403611b0d5742600760109054906101000a900467ffffffffffffffff168460400151611acb9190613c79565b67ffffffffffffffff161115611b0d576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611bb790613dc2565b915050611944565b50611c357f000000000000000000000000000000000000000000000000000000000000000084611bed6107c1565b611bf79190613df9565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190613029565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d06908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d469190613ac3565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611db896959493929190613e10565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611f085760f9601f8351611e4c9190613e72565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611ef29796959493929190613e8d565b604051602081830303815290604052905061200c565b815161ffff1015611f45576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f54602083613e72565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611ff99796959493929190613f6f565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa15801561206a573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120e2576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121279084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614051565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121ba576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c26565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612283576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361228f8282613b23565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c269190613447565b60025473ffffffffffffffffffffffffffffffffffffffff163314612310576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f81900361234b576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612387576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612392602442613c9a565b8467ffffffffffffffff1611156123d5576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561243a575f80fd5b505af115801561244c573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de91906138ec565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b858110156127fc575f8b8b8381811061251c5761251c613cad565b905060200281019061252e9190613cda565b61253790613d16565b8051805160209091012060408201519192509067ffffffffffffffff1615612717578561256381613d9c565b9650505f818360200151846040015185606001516040516020016125c59493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f9081526006909352912054909150811461264d576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9055506127e7565b8151516201d4c01015612756576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b505080806127f490613dc2565b915050612501565b5060075467ffffffffffffffff9081169084161115612847576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff848116908316146128fc575f61286c8386613930565b905061288267ffffffffffffffff821683613aaa565b91506128bb7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bed6107c1565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b6129f8337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129af91906138ec565b6129b99190613df9565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190613102565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab89190613ac3565b9050612ac48782613930565b67ffffffffffffffff168967ffffffffffffffff1614612b10576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051612b4c91815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612ba0575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612bd7576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6491906139e1565b15612c9b576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2991906138ec565b905082811115612d65576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612da1576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612de373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084613102565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e7191906138ec565b6007805491925067ffffffffffffffff909116905f612e8f83613d9c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612ec69291906140ac565b6040519081900390208142612edc600143613aaa565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303612fd2576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2613021565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061301890849033908b908b906140bb565b60405180910390a25b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130fd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613166565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131609085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161307b565b50505050565b5f6131c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132719092919063ffffffff16565b8051909150156130fd57808060200190518101906131e591906139e1565b6130fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e35565b606061215c84845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516132a3919061412b565b5f6040518083038185875af1925050503d805f81146132dd576040519150601f19603f3d011682016040523d82523d5f602084013e6132e2565b606091505b50915091506132f3878383876132fe565b979650505050505050565b606083156133935782515f0361338c5773ffffffffffffffffffffffffffffffffffffffff85163b61338c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e35565b508161215c565b61215c83838151156133a85781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359190613447565b5f5b838110156133f65781810151838201526020016133de565b50505f910152565b5f81518084526134158160208601602086016133dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61345960208301846133fe565b9392505050565b67ffffffffffffffff81168114613475575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613475575f80fd5b5f805f606084860312156134ab575f80fd5b83356134b681613460565b92506020840135915060408401356134cd81613478565b809150509250925092565b5f602082840312156134e8575f80fd5b813561345981613460565b5f60208284031215613503575f80fd5b813561345981613478565b63ffffffff81168114613475575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135935761359361351f565b604052919050565b5f67ffffffffffffffff8211156135b4576135b461351f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126135ef575f80fd5b81356136026135fd8261359b565b61354c565b818152846020838601011115613616575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613647575f80fd5b863561365281613478565b9550602087013561366281613478565b945060408701356136728161350e565b9350606087013561368281613478565b9250608087013567ffffffffffffffff8082111561369e575f80fd5b6136aa8a838b016135e0565b935060a08901359150808211156136bf575f80fd5b506136cc89828a016135e0565b9150509295509295509295565b5f8083601f8401126136e9575f80fd5b50813567ffffffffffffffff811115613700575f80fd5b6020830191508360208260051b850101111561371a575f80fd5b9250929050565b5f8060208385031215613732575f80fd5b823567ffffffffffffffff811115613748575f80fd5b613754858286016136d9565b90969095509350505050565b5f805f8060808587031215613773575f80fd5b843561377e8161350e565b9350602085013561378e81613478565b9250604085013561379e8161350e565b9150606085013567ffffffffffffffff8111156137b9575f80fd5b6137c5878288016135e0565b91505092959194509250565b5f602082840312156137e1575f80fd5b813567ffffffffffffffff8111156137f7575f80fd5b61215c848285016135e0565b5f805f805f60808688031215613817575f80fd5b853567ffffffffffffffff81111561382d575f80fd5b613839888289016136d9565b909650945050602086013561384d81613460565b9250604086013561385d81613460565b9150606086013561386d81613478565b809150509295509295909350565b5f805f6040848603121561388d575f80fd5b833567ffffffffffffffff808211156138a4575f80fd5b818601915086601f8301126138b7575f80fd5b8135818111156138c5575f80fd5b8760208285010111156138d6575f80fd5b6020928301989097509590910135949350505050565b5f602082840312156138fc575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561395157613951613903565b5092915050565b5f8261398b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806139a457607f821691505b6020821081036139db577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f602082840312156139f1575f80fd5b81518015158114613459575f80fd5b5f60208284031215613a10575f80fd5b815167ffffffffffffffff811115613a26575f80fd5b8201601f81018413613a36575f80fd5b8051613a446135fd8261359b565b818152856020838501011115613a58575f80fd5b613a698260208301602086016133dc565b95945050505050565b5f8060408385031215613a83575f80fd5b8251613a8e8161350e565b6020840151909250613a9f81613478565b809150509250929050565b81810381811115613abd57613abd613903565b92915050565b5f60208284031215613ad3575f80fd5b815161345981613460565b601f8211156130fd575f81815260208120601f850160051c81016020861015613b045750805b601f850160051c820191505b8181101561302157828155600101613b10565b815167ffffffffffffffff811115613b3d57613b3d61351f565b613b5181613b4b8454613990565b84613ade565b602080601f831160018114613ba3575f8415613b6d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613021565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bef57888601518255948401946001909101908401613bd0565b5085821015613c2b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613c4d60608301866133fe565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561395157613951613903565b80820180821115613abd57613abd613903565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613d0c575f80fd5b9190910192915050565b5f60808236031215613d26575f80fd5b6040516080810167ffffffffffffffff8282108183111715613d4a57613d4a61351f565b816040528435915080821115613d5e575f80fd5b50613d6b368286016135e0565b825250602083013560208201526040830135613d8681613460565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613db857613db8613903565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613df257613df2613903565b5060010190565b8082028115828204841417613abd57613abd613903565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613e6660c08301846133fe565b98975050505050505050565b61ffff81811683821601908082111561395157613951613903565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613ef5816003860160208c016133dc565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f38816017840160208b016133dc565b808201915050818660f81b16601782015284519150613f5e8260188301602088016133dc565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613fd7816003860160208c016133dc565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b166003820152865161401a816017840160208b016133dc565b808201915050818660f01b166017820152845191506140408260198301602088016133dc565b016019019998505050505050505050565b5f8651614062818460208b016133dc565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613d0c8184602087016133dc56fea26469706673582212204199bee75172b6df87456fbd3d395b9339cfeb50c9ce237e7bfa7cdbbc43d07364736f6c63430008140033", + "bytecode": "0x61010060405234801562000011575f80fd5b506040516200433b3803806200433b83398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e051614184620001b75f395f81816104f10152818161095501528181610ac101528181610d090152818161108b015281816115260152818161197501528181611a6a01528181612639015281816126b2015281816126d4015281816127e9015281816129890152612a4e01525f818161064a01528181611c3401528181611d3c0152818161218701528181612e3c0152612f1101525f818161070601528181610f02015281816122030152612b9601525f818161074b01528181610808015281816119be015281816127800152612b6b01526141845ff3fe608060405234801561000f575f80fd5b50600436106102d7575f3560e01c80637125702211610187578063c7fffd4b116100dd578063def57e5411610093578063eaeb077b1161006e578063eaeb077b14610781578063f35dda4714610794578063f851a4401461079c575f80fd5b8063def57e5414610733578063e46761c414610746578063e7a7ed021461076d575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff14610728575f80fd5b8063c7fffd4b146106c6578063c89e42df146106ce575f80fd5b80639f26f8401161013d578063ada8f91911610118578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e575f80fd5b80639f26f84014610632578063a3c573eb14610645578063a652f26c1461066c575f80fd5b80638c3d73011161016d5780638c3d7301146105fc57806391cafe32146106045780639e00187714610617575f80fd5b806371257022146105ad5780637a5460c5146105c0575f80fd5b806340b5de6c1161023c57806352bdeb6d116101f25780636b8616ce116101cd5780636b8616ce146105725780636e05d2cd146105915780636ff512cc1461059a575f80fd5b806352bdeb6d14610526578063542028d514610562578063676870d21461056a575f80fd5b8063456052671161022257806345605267146104b357806349b7b802146104ec5780634e48770614610513575f80fd5b806340b5de6c1461045357806342308fab146104ab575f80fd5b8063267822471161029157806332c2d1531161027757806332c2d153146103e15780633c351e10146103f65780633cbc795b14610416575f80fd5b8063267822471461037c5780632c111c06146103c1575f80fd5b806305835f37116102c157806305835f3714610311578063107bf28c1461035a57806311e892d414610362575f80fd5b8062d0295d146102db57806303508963146102f6575b5f80fd5b6102e36107c1565b6040519081526020015b60405180910390f35b6102fe602081565b60405161ffff90911681526020016102ed565b61034d6040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102ed9190613459565b61034d6108c7565b61036a60f981565b60405160ff90911681526020016102ed565b60015461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ed565b60085461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103f46103ef3660046134ab565b610953565b005b60095461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60095461043e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102ed565b61047a7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102ed565b6102e3602481565b6007546104d39068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102ed565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6103f46105213660046134ea565b610a22565b61034d6040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b61034d610c31565b6102fe601f81565b6102e36105803660046134ea565b60066020525f908152604090205481565b6102e360055481565b6103f46105a8366004613505565b610c3e565b6103f46105bb366004613644565b610d07565b61034d6040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103f46112c0565b6103f4610612366004613505565b611392565b61039c73a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103f4610640366004613733565b6114aa565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b61034d61067a366004613772565b611b36565b6103f461068d366004613505565b611f14565b6102e36405ca1ab1e081565b6007546104d390700100000000000000000000000000000000900467ffffffffffffffff1681565b61036a60e481565b6103f46106dc3660046137e3565b611fdd565b60025461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3635ca1ab1e81565b6103f4610741366004613815565b61206f565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d39067ffffffffffffffff1681565b6103f461078f36600461388d565b612912565b61036a601b81565b5f5461039c9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561084d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087191906138fe565b6007549091505f9061089b9067ffffffffffffffff68010000000000000000820481169116613942565b67ffffffffffffffff169050805f036108b6575f9250505090565b6108c0818361396a565b9250505090565b600480546108d4906139a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610900906139a2565b801561094b5780601f106109225761010080835404028352916020019161094b565b820191905f5260205f20905b81548152906001019060200180831161092e57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109c2576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1591815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a78576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610abf576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4c91906139f3565b610bad5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bad576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108d4906139a2565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c94576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c26565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d76576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d9457505f54600160ff909116105b80610dad5750303b158015610dad57505f5460ff166001145b610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e9a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f610ea485612dd9565b6009549091505f90610eee90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611b36565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d91906138fe565b90505f808483858f610fa0600143613a12565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156110e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a9190613a2b565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161119a9190613a8b565b5060046111a78982613a8b565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161124793929190613ba3565b60405180910390a150505050505080156112b7575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611311576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146113e8576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611437576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c26565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906114e8575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561151f576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b19190613a2b565b6115bb9190613be1565b67ffffffffffffffff1611156115fd576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611638576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611674576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161169c91849168010000000000000000900416613c02565b11156116d4576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b8381101561196f575f87878381811061170f5761170f613c15565b90506020028101906117219190613c42565b61172a90613c7e565b90508361173681613d04565b825180516020918201208185015160408087015160608801519151959a509295505f946117a2948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f9081526006909352912054909150811461182a576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f9081526006602052604081205561184e600188613a12565b84036118bd5742600760109054906101000a900467ffffffffffffffff16846040015161187b9190613be1565b67ffffffffffffffff1611156118bd576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209450505050808061196790613d2a565b9150506116f4565b506119e57f00000000000000000000000000000000000000000000000000000000000000008461199d6107c1565b6119a79190613d61565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919061303b565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611ab6908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af69190613a2b565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611b6896959493929190613d78565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611cb85760f9601f8351611bfc9190613dda565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611ca29796959493929190613df5565b6040516020818303038152906040529050611dbc565b815161ffff1015611cf5576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611d04602083613dda565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611da99796959493929190613ed7565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015611e1a573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611e92576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90611ed79084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613fb9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611f6a576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c26565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612033576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361203f8282613a8b565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c269190613459565b60025473ffffffffffffffffffffffffffffffffffffffff1633146120c0576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036120fb576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612137576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612142602442613c02565b8467ffffffffffffffff161115612185576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156121ea575f80fd5b505af11580156121fc573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228e91906138fe565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b858110156125ac575f8b8b838181106122cc576122cc613c15565b90506020028101906122de9190613c42565b6122e790613c7e565b8051805160209091012060408201519192509067ffffffffffffffff16156124c7578561231381613d04565b9650505f818360200151846040015185606001516040516020016123759493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146123fd576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612597565b8151516201d4c01015612506576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b505080806125a490613d2a565b9150506122b1565b5060075467ffffffffffffffff90811690841611156125f7576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff848116908316146126ac575f61261c8386613942565b905061263267ffffffffffffffff821683613a12565b915061266b7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff1661199d6107c1565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b6127a8337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061275f91906138fe565b6127699190613d61565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190613114565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612844573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128689190613a2b565b90506128748782613942565b67ffffffffffffffff168967ffffffffffffffff16146128c0576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e766876040516128fc91815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612950575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612987576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1491906139f3565b15612a4b576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad991906138fe565b905082811115612b15576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612b51576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b9373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084613114565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2191906138fe565b6007805491925067ffffffffffffffff909116905f612c3f83613d04565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612c76929190614014565b6040519081900390208142612c8c600143613a12565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303612d82576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2612dd1565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93190612dc890849033908b908b90614023565b60405180910390a25b505050505050565b606073ffffffffffffffffffffffffffffffffffffffff821615613036576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015612e80573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612ec59190810190614093565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015612f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7b9190614105565b915091508163ffffffff165f14612ff2576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff841617179055613033565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261310f9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613178565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131729085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161308d565b50505050565b5f6131d9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132839092919063ffffffff16565b80519091501561310f57808060200190518101906131f791906139f3565b61310f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e35565b6060611f0c84845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516132b5919061413d565b5f6040518083038185875af1925050503d805f81146132ef576040519150601f19603f3d011682016040523d82523d5f602084013e6132f4565b606091505b509150915061330587838387613310565b979650505050505050565b606083156133a55782515f0361339e5773ffffffffffffffffffffffffffffffffffffffff85163b61339e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e35565b5081611f0c565b611f0c83838151156133ba5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359190613459565b5f5b838110156134085781810151838201526020016133f0565b50505f910152565b5f81518084526134278160208601602086016133ee565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61346b6020830184613410565b9392505050565b67ffffffffffffffff81168114613487575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613487575f80fd5b5f805f606084860312156134bd575f80fd5b83356134c881613472565b92506020840135915060408401356134df8161348a565b809150509250925092565b5f602082840312156134fa575f80fd5b813561346b81613472565b5f60208284031215613515575f80fd5b813561346b8161348a565b63ffffffff81168114613487575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135a5576135a5613531565b604052919050565b5f67ffffffffffffffff8211156135c6576135c6613531565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613601575f80fd5b813561361461360f826135ad565b61355e565b818152846020838601011115613628575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613659575f80fd5b86356136648161348a565b955060208701356136748161348a565b9450604087013561368481613520565b935060608701356136948161348a565b9250608087013567ffffffffffffffff808211156136b0575f80fd5b6136bc8a838b016135f2565b935060a08901359150808211156136d1575f80fd5b506136de89828a016135f2565b9150509295509295509295565b5f8083601f8401126136fb575f80fd5b50813567ffffffffffffffff811115613712575f80fd5b6020830191508360208260051b850101111561372c575f80fd5b9250929050565b5f8060208385031215613744575f80fd5b823567ffffffffffffffff81111561375a575f80fd5b613766858286016136eb565b90969095509350505050565b5f805f8060808587031215613785575f80fd5b843561379081613520565b935060208501356137a08161348a565b925060408501356137b081613520565b9150606085013567ffffffffffffffff8111156137cb575f80fd5b6137d7878288016135f2565b91505092959194509250565b5f602082840312156137f3575f80fd5b813567ffffffffffffffff811115613809575f80fd5b611f0c848285016135f2565b5f805f805f60808688031215613829575f80fd5b853567ffffffffffffffff81111561383f575f80fd5b61384b888289016136eb565b909650945050602086013561385f81613472565b9250604086013561386f81613472565b9150606086013561387f8161348a565b809150509295509295909350565b5f805f6040848603121561389f575f80fd5b833567ffffffffffffffff808211156138b6575f80fd5b818601915086601f8301126138c9575f80fd5b8135818111156138d7575f80fd5b8760208285010111156138e8575f80fd5b6020928301989097509590910135949350505050565b5f6020828403121561390e575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561396357613963613915565b5092915050565b5f8261399d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806139b657607f821691505b6020821081036139ed577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215613a03575f80fd5b8151801515811461346b575f80fd5b81810381811115613a2557613a25613915565b92915050565b5f60208284031215613a3b575f80fd5b815161346b81613472565b601f82111561310f575f81815260208120601f850160051c81016020861015613a6c5750805b601f850160051c820191505b81811015612dd157828155600101613a78565b815167ffffffffffffffff811115613aa557613aa5613531565b613ab981613ab384546139a2565b84613a46565b602080601f831160018114613b0b575f8415613ad55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dd1565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b5757888601518255948401946001909101908401613b38565b5085821015613b9357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613bb56060830186613410565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561396357613963613915565b80820180821115613a2557613a25613915565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c74575f80fd5b9190910192915050565b5f60808236031215613c8e575f80fd5b6040516080810167ffffffffffffffff8282108183111715613cb257613cb2613531565b816040528435915080821115613cc6575f80fd5b50613cd3368286016135f2565b825250602083013560208201526040830135613cee81613472565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613d2057613d20613915565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d5a57613d5a613915565b5060010190565b8082028115828204841417613a2557613a25613915565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613dce60c0830184613410565b98975050505050505050565b61ffff81811683821601908082111561396357613963613915565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e5d816003860160208c016133ee565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613ea0816017840160208b016133ee565b808201915050818660f81b16601782015284519150613ec68260188301602088016133ee565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613f3f816003860160208c016133ee565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f82816017840160208b016133ee565b808201915050818660f01b16601782015284519150613fa88260198301602088016133ee565b016019019998505050505050505050565b5f8651613fca818460208b016133ee565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f602082840312156140a3575f80fd5b815167ffffffffffffffff8111156140b9575f80fd5b8201601f810184136140c9575f80fd5b80516140d761360f826135ad565b8181528560208385010111156140eb575f80fd5b6140fc8260208301602086016133ee565b95945050505050565b5f8060408385031215614116575f80fd5b825161412181613520565b60208401519092506141328161348a565b809150509250929050565b5f8251613c748184602087016133ee56fea26469706673582212203468c0d2b0beef59c94c9f274904c9bab0f8f715c31d4a4cd5424a1664f69b2e64736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102d7575f3560e01c80637125702211610187578063c7fffd4b116100dd578063def57e5411610093578063eaeb077b1161006e578063eaeb077b14610781578063f35dda4714610794578063f851a4401461079c575f80fd5b8063def57e5414610733578063e46761c414610746578063e7a7ed021461076d575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff14610728575f80fd5b8063c7fffd4b146106c6578063c89e42df146106ce575f80fd5b80639f26f8401161013d578063ada8f91911610118578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e575f80fd5b80639f26f84014610632578063a3c573eb14610645578063a652f26c1461066c575f80fd5b80638c3d73011161016d5780638c3d7301146105fc57806391cafe32146106045780639e00187714610617575f80fd5b806371257022146105ad5780637a5460c5146105c0575f80fd5b806340b5de6c1161023c57806352bdeb6d116101f25780636b8616ce116101cd5780636b8616ce146105725780636e05d2cd146105915780636ff512cc1461059a575f80fd5b806352bdeb6d14610526578063542028d514610562578063676870d21461056a575f80fd5b8063456052671161022257806345605267146104b357806349b7b802146104ec5780634e48770614610513575f80fd5b806340b5de6c1461045357806342308fab146104ab575f80fd5b8063267822471161029157806332c2d1531161027757806332c2d153146103e15780633c351e10146103f65780633cbc795b14610416575f80fd5b8063267822471461037c5780632c111c06146103c1575f80fd5b806305835f37116102c157806305835f3714610311578063107bf28c1461035a57806311e892d414610362575f80fd5b8062d0295d146102db57806303508963146102f6575b5f80fd5b6102e36107c1565b6040519081526020015b60405180910390f35b6102fe602081565b60405161ffff90911681526020016102ed565b61034d6040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102ed9190613459565b61034d6108c7565b61036a60f981565b60405160ff90911681526020016102ed565b60015461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ed565b60085461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103f46103ef3660046134ab565b610953565b005b60095461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b60095461043e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102ed565b61047a7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102ed565b6102e3602481565b6007546104d39068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102ed565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6103f46105213660046134ea565b610a22565b61034d6040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b61034d610c31565b6102fe601f81565b6102e36105803660046134ea565b60066020525f908152604090205481565b6102e360055481565b6103f46105a8366004613505565b610c3e565b6103f46105bb366004613644565b610d07565b61034d6040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103f46112c0565b6103f4610612366004613505565b611392565b61039c73a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103f4610640366004613733565b6114aa565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b61034d61067a366004613772565b611b36565b6103f461068d366004613505565b611f14565b6102e36405ca1ab1e081565b6007546104d390700100000000000000000000000000000000900467ffffffffffffffff1681565b61036a60e481565b6103f46106dc3660046137e3565b611fdd565b60025461039c9073ffffffffffffffffffffffffffffffffffffffff1681565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3635ca1ab1e81565b6103f4610741366004613815565b61206f565b61039c7f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d39067ffffffffffffffff1681565b6103f461078f36600461388d565b612912565b61036a601b81565b5f5461039c9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561084d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087191906138fe565b6007549091505f9061089b9067ffffffffffffffff68010000000000000000820481169116613942565b67ffffffffffffffff169050805f036108b6575f9250505090565b6108c0818361396a565b9250505090565b600480546108d4906139a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610900906139a2565b801561094b5780601f106109225761010080835404028352916020019161094b565b820191905f5260205f20905b81548152906001019060200180831161092e57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109c2576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1591815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a78576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610abf576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4c91906139f3565b610bad5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bad576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108d4906139a2565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c94576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c26565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d76576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d9457505f54600160ff909116105b80610dad5750303b158015610dad57505f5460ff166001145b610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e9a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f610ea485612dd9565b6009549091505f90610eee90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611b36565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d91906138fe565b90505f808483858f610fa0600143613a12565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156110e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a9190613a2b565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161119a9190613a8b565b5060046111a78982613a8b565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161124793929190613ba3565b60405180910390a150505050505080156112b7575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611311576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146113e8576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611437576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c26565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906114e8575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561151f576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b19190613a2b565b6115bb9190613be1565b67ffffffffffffffff1611156115fd576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611638576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611674576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161169c91849168010000000000000000900416613c02565b11156116d4576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b8381101561196f575f87878381811061170f5761170f613c15565b90506020028101906117219190613c42565b61172a90613c7e565b90508361173681613d04565b825180516020918201208185015160408087015160608801519151959a509295505f946117a2948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f9081526006909352912054909150811461182a576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f9081526006602052604081205561184e600188613a12565b84036118bd5742600760109054906101000a900467ffffffffffffffff16846040015161187b9190613be1565b67ffffffffffffffff1611156118bd576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209450505050808061196790613d2a565b9150506116f4565b506119e57f00000000000000000000000000000000000000000000000000000000000000008461199d6107c1565b6119a79190613d61565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016919061303b565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611ab6908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af69190613a2b565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611b6896959493929190613d78565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611cb85760f9601f8351611bfc9190613dda565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611ca29796959493929190613df5565b6040516020818303038152906040529050611dbc565b815161ffff1015611cf5576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611d04602083613dda565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611da99796959493929190613ed7565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015611e1a573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611e92576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90611ed79084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613fb9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611f6a576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c26565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612033576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361203f8282613a8b565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c269190613459565b60025473ffffffffffffffffffffffffffffffffffffffff1633146120c0576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036120fb576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612137576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612142602442613c02565b8467ffffffffffffffff161115612185576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156121ea575f80fd5b505af11580156121fc573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228e91906138fe565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b858110156125ac575f8b8b838181106122cc576122cc613c15565b90506020028101906122de9190613c42565b6122e790613c7e565b8051805160209091012060408201519192509067ffffffffffffffff16156124c7578561231381613d04565b9650505f818360200151846040015185606001516040516020016123759493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146123fd576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612597565b8151516201d4c01015612506576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b505080806125a490613d2a565b9150506122b1565b5060075467ffffffffffffffff90811690841611156125f7576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff848116908316146126ac575f61261c8386613942565b905061263267ffffffffffffffff821683613a12565b915061266b7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff1661199d6107c1565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b6127a8337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061275f91906138fe565b6127699190613d61565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190613114565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612844573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128689190613a2b565b90506128748782613942565b67ffffffffffffffff168967ffffffffffffffff16146128c0576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e766876040516128fc91815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612950575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612987576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1491906139f3565b15612a4b576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad991906138fe565b905082811115612b15576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612b51576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b9373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084613114565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2191906138fe565b6007805491925067ffffffffffffffff909116905f612c3f83613d04565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612c76929190614014565b6040519081900390208142612c8c600143613a12565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f9081526006909352912055323303612d82576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a2612dd1565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93190612dc890849033908b908b90614023565b60405180910390a25b505050505050565b606073ffffffffffffffffffffffffffffffffffffffff821615613036576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015612e80573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612ec59190810190614093565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015612f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7b9190614105565b915091508163ffffffff165f14612ff2576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff841617179055613033565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261310f9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613178565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131729085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161308d565b50505050565b5f6131d9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132839092919063ffffffff16565b80519091501561310f57808060200190518101906131f791906139f3565b61310f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e35565b6060611f0c84845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516132b5919061413d565b5f6040518083038185875af1925050503d805f81146132ef576040519150601f19603f3d011682016040523d82523d5f602084013e6132f4565b606091505b509150915061330587838387613310565b979650505050505050565b606083156133a55782515f0361339e5773ffffffffffffffffffffffffffffffffffffffff85163b61339e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e35565b5081611f0c565b611f0c83838151156133ba5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359190613459565b5f5b838110156134085781810151838201526020016133f0565b50505f910152565b5f81518084526134278160208601602086016133ee565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61346b6020830184613410565b9392505050565b67ffffffffffffffff81168114613487575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613487575f80fd5b5f805f606084860312156134bd575f80fd5b83356134c881613472565b92506020840135915060408401356134df8161348a565b809150509250925092565b5f602082840312156134fa575f80fd5b813561346b81613472565b5f60208284031215613515575f80fd5b813561346b8161348a565b63ffffffff81168114613487575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135a5576135a5613531565b604052919050565b5f67ffffffffffffffff8211156135c6576135c6613531565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613601575f80fd5b813561361461360f826135ad565b61355e565b818152846020838601011115613628575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613659575f80fd5b86356136648161348a565b955060208701356136748161348a565b9450604087013561368481613520565b935060608701356136948161348a565b9250608087013567ffffffffffffffff808211156136b0575f80fd5b6136bc8a838b016135f2565b935060a08901359150808211156136d1575f80fd5b506136de89828a016135f2565b9150509295509295509295565b5f8083601f8401126136fb575f80fd5b50813567ffffffffffffffff811115613712575f80fd5b6020830191508360208260051b850101111561372c575f80fd5b9250929050565b5f8060208385031215613744575f80fd5b823567ffffffffffffffff81111561375a575f80fd5b613766858286016136eb565b90969095509350505050565b5f805f8060808587031215613785575f80fd5b843561379081613520565b935060208501356137a08161348a565b925060408501356137b081613520565b9150606085013567ffffffffffffffff8111156137cb575f80fd5b6137d7878288016135f2565b91505092959194509250565b5f602082840312156137f3575f80fd5b813567ffffffffffffffff811115613809575f80fd5b611f0c848285016135f2565b5f805f805f60808688031215613829575f80fd5b853567ffffffffffffffff81111561383f575f80fd5b61384b888289016136eb565b909650945050602086013561385f81613472565b9250604086013561386f81613472565b9150606086013561387f8161348a565b809150509295509295909350565b5f805f6040848603121561389f575f80fd5b833567ffffffffffffffff808211156138b6575f80fd5b818601915086601f8301126138c9575f80fd5b8135818111156138d7575f80fd5b8760208285010111156138e8575f80fd5b6020928301989097509590910135949350505050565b5f6020828403121561390e575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561396357613963613915565b5092915050565b5f8261399d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806139b657607f821691505b6020821081036139ed577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215613a03575f80fd5b8151801515811461346b575f80fd5b81810381811115613a2557613a25613915565b92915050565b5f60208284031215613a3b575f80fd5b815161346b81613472565b601f82111561310f575f81815260208120601f850160051c81016020861015613a6c5750805b601f850160051c820191505b81811015612dd157828155600101613a78565b815167ffffffffffffffff811115613aa557613aa5613531565b613ab981613ab384546139a2565b84613a46565b602080601f831160018114613b0b575f8415613ad55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dd1565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b5757888601518255948401946001909101908401613b38565b5085821015613b9357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613bb56060830186613410565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561396357613963613915565b80820180821115613a2557613a25613915565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c74575f80fd5b9190910192915050565b5f60808236031215613c8e575f80fd5b6040516080810167ffffffffffffffff8282108183111715613cb257613cb2613531565b816040528435915080821115613cc6575f80fd5b50613cd3368286016135f2565b825250602083013560208201526040830135613cee81613472565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613d2057613d20613915565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d5a57613d5a613915565b5060010190565b8082028115828204841417613a2557613a25613915565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613dce60c0830184613410565b98975050505050505050565b61ffff81811683821601908082111561396357613963613915565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e5d816003860160208c016133ee565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613ea0816017840160208b016133ee565b808201915050818660f81b16601782015284519150613ec68260188301602088016133ee565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613f3f816003860160208c016133ee565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f82816017840160208b016133ee565b808201915050818660f01b16601782015284519150613fa88260198301602088016133ee565b016019019998505050505050505050565b5f8651613fca818460208b016133ee565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f602082840312156140a3575f80fd5b815167ffffffffffffffff8111156140b9575f80fd5b8201601f810184136140c9575f80fd5b80516140d761360f826135ad565b8181528560208385010111156140eb575f80fd5b6140fc8260208301602086016133ee565b95945050505050565b5f8060408385031215614116575f80fd5b825161412181613520565b60208401519092506141328161348a565b809150509250929050565b5f8251613c748184602087016133ee56fea26469706673582212203468c0d2b0beef59c94c9f274904c9bab0f8f715c31d4a4cd5424a1664f69b2e64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMEtrogPrevious.json b/compiled-contracts/PolygonZkEVMEtrogPrevious.json index f1d9486e0..ee0fabec8 100644 --- a/compiled-contracts/PolygonZkEVMEtrogPrevious.json +++ b/compiled-contracts/PolygonZkEVMEtrogPrevious.json @@ -1145,8 +1145,8 @@ "type": "function" } ], - "bytecode": "0x61010060405234801562000011575f80fd5b50604051620042443803806200424483398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e05161408d620001b75f395f81816104de0152818161094201528181610aae01528181610cf6015281816112c80152818161176301528181611bb201528181611ca701528181612323015281816123e801528181612cf201528181612d6b01528181612d8d0152612ea201525f818161063701528181610eea01528181610fbf01528181611e7101528181611f79015261283d01525f81816106f30152818161113f0152818161253001526128b901525f8181610725015281816107f501528181611bfb015281816125050152612e39015261408d5ff3fe608060405234801561000f575f80fd5b50600436106102cc575f3560e01c80637a5460c51161017c578063c7fffd4b116100dd578063e46761c411610093578063ecef3f991161006e578063ecef3f991461076e578063f35dda4714610781578063f851a44014610789575f80fd5b8063e46761c414610720578063e7a7ed0214610747578063eaeb077b1461075b575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106ce578063d02103ca146106ee578063d7bc90ff14610715575f80fd5b8063c7fffd4b146106b3578063c89e42df146106bb575f80fd5b8063a3c573eb11610132578063ada8f91911610118578063ada8f9191461066c578063b0afe1541461067f578063c754c7ed1461068b575f80fd5b8063a3c573eb14610632578063a652f26c14610659575f80fd5b806391cafe321161016257806391cafe32146105f15780639e001877146106045780639f26f8401461061f575f80fd5b80637a5460c5146105ad5780638c3d7301146105e9575f80fd5b806340b5de6c11610231578063542028d5116101e75780636e05d2cd116101c25780636e05d2cd1461057e5780636ff512cc14610587578063712570221461059a575f80fd5b8063542028d51461054f578063676870d2146105575780636b8616ce1461055f575f80fd5b806349b7b8021161021757806349b7b802146104d95780634e4877061461050057806352bdeb6d14610513575f80fd5b806340b5de6c1461044857806345605267146104a0575f80fd5b8063267822471161028657806332c2d1531161026c57806332c2d153146103d65780633c351e10146103eb5780633cbc795b1461040b575f80fd5b806326782247146103715780632c111c06146103b6575f80fd5b806305835f37116102b657806305835f3714610306578063107bf28c1461034f57806311e892d414610357575f80fd5b8062d0295d146102d057806303508963146102eb575b5f80fd5b6102d86107ae565b6040519081526020015b60405180910390f35b6102f3602081565b60405161ffff90911681526020016102e2565b6103426040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102e29190613392565b6103426108b4565b61035f60f981565b60405160ff90911681526020016102e2565b6001546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6008546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103e96103e43660046133e4565b610940565b005b6009546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104339074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102e2565b61046f7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102e2565b6007546104c09068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103e961050e366004613423565b610a0f565b6103426040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610342610c1e565b6102f3601f81565b6102d861056d366004613423565b60066020525f908152604090205481565b6102d860055481565b6103e961059536600461343e565b610c2b565b6103e96105a836600461357d565b610cf4565b6103426040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103e96114fd565b6103e96105ff36600461343e565b6115cf565b61039173a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103e961062d36600461366c565b6116e7565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103426106673660046136ab565b611d73565b6103e961067a36600461343e565b612151565b6102d86405ca1ab1e081565b6007546104c090700100000000000000000000000000000000900467ffffffffffffffff1681565b61035f60e481565b6103e96106c936600461371c565b61221a565b6002546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6102d8635ca1ab1e81565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6007546104c09067ffffffffffffffff1681565b6103e961076936600461374e565b6122ac565b6103e961077c3660046137bf565b612773565b61035f601b81565b5f546103919062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e9190613807565b6007549091505f906108889067ffffffffffffffff6801000000000000000082048116911661384b565b67ffffffffffffffff169050805f036108a3575f9250505090565b6108ad8183613873565b9250505090565b600480546108c1906138ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906138ab565b80156109385780601f1061090f57610100808354040283529160200191610938565b820191905f5260205f20905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109af576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a0291815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a65576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610aac576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3991906138fc565b610b9a5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610b9a576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108c1906138ab565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c81576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d63576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d8157505f54600160ff909116105b80610d9a5750303b158015610d9a57505f5460ff166001145b610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e87575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110e4576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f73919081019061391b565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611005573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611029919061398d565b915091508163ffffffff165f146110a0576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110e1565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061112b90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d73565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190613807565b90505f808483858f6111dd6001436139c5565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611323573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134791906139de565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113d79190613a3e565b5060046113e48982613a3e565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161148493929190613b56565b60405180910390a150505050505080156114f4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461154e576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611625576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611674576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c13565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611725575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561175c576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ee91906139de565b6117f89190613b94565b67ffffffffffffffff16111561183a576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611875576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118b1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118d991849168010000000000000000900416613bb5565b1115611911576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bac575f87878381811061194c5761194c613bc8565b905060200281019061195e9190613bf5565b61196790613c31565b90508361197381613cb7565b825180516020918201208185015160408087015160608801519151959a509295505f946119df948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a67576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a8b6001886139c5565b8403611afa5742600760109054906101000a900467ffffffffffffffff168460400151611ab89190613b94565b67ffffffffffffffff161115611afa576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611ba490613cdd565b915050611931565b50611c227f000000000000000000000000000000000000000000000000000000000000000084611bda6107ae565b611be49190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612f74565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611cf3908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3391906139de565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611da596959493929190613d2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611ef55760f9601f8351611e399190613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611edf9796959493929190613da8565b6040516020818303038152906040529050611ff9565b815161ffff1015611f32576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f41602083613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611fe69796959493929190613e8a565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612057573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120cf576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121149084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613f6c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121a7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c13565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612270576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361227c8282613a3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c139190613392565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906122ea575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612321576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906138fc565b156123e5576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124739190613807565b9050828111156124af576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888411156124eb576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252d73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461304d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bb9190613807565b6007805491925067ffffffffffffffff909116905f6125d983613cb7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612610929190613fc7565b60405190819003902081426126266001436139c5565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361271c576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a261276b565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061276290849033908b908b90613fd6565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146127c4576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036127ff576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561283b576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156128a0575f80fd5b505af11580156128b2573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612920573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129449190613807565b60075460055491925042916801000000000000000090910467ffffffffffffffff1690815f5b86811015612c65575f8a8a8381811061298557612985613bc8565b90506020028101906129979190613bf5565b6129a090613c31565b8051805160209091012060408201519192509067ffffffffffffffff1615612b8057856129cc81613cb7565b9650505f81836020015184604001518560600151604051602001612a2e9493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612ab6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612c50565b8151516201d4c01015612bbf576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612c5d90613cdd565b91505061296a565b5060075467ffffffffffffffff9081169084161115612cb0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612d65575f612cd5838661384b565b9050612ceb67ffffffffffffffff8216836139c5565b9150612d247f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bda6107ae565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612e61337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e189190613807565b612e229190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061304d565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612efd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2191906139de565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612f5f91815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b1565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526130ab9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612fc6565b50505050565b5f613112826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131bc9092919063ffffffff16565b805190915015613048578080602001905181019061313091906138fc565b613048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e22565b606061214984845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516131ee9190614046565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b509150915061323e87838387613249565b979650505050505050565b606083156132de5782515f036132d75773ffffffffffffffffffffffffffffffffffffffff85163b6132d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e22565b5081612149565b61214983838151156132f35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229190613392565b5f5b83811015613341578181015183820152602001613329565b50505f910152565b5f8151808452613360816020860160208601613327565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6133a46020830184613349565b9392505050565b67ffffffffffffffff811681146133c0575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146133c0575f80fd5b5f805f606084860312156133f6575f80fd5b8335613401816133ab565b9250602084013591506040840135613418816133c3565b809150509250925092565b5f60208284031215613433575f80fd5b81356133a4816133ab565b5f6020828403121561344e575f80fd5b81356133a4816133c3565b63ffffffff811681146133c0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134de576134de61346a565b604052919050565b5f67ffffffffffffffff8211156134ff576134ff61346a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261353a575f80fd5b813561354d613548826134e6565b613497565b818152846020838601011115613561575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613592575f80fd5b863561359d816133c3565b955060208701356135ad816133c3565b945060408701356135bd81613459565b935060608701356135cd816133c3565b9250608087013567ffffffffffffffff808211156135e9575f80fd5b6135f58a838b0161352b565b935060a089013591508082111561360a575f80fd5b5061361789828a0161352b565b9150509295509295509295565b5f8083601f840112613634575f80fd5b50813567ffffffffffffffff81111561364b575f80fd5b6020830191508360208260051b8501011115613665575f80fd5b9250929050565b5f806020838503121561367d575f80fd5b823567ffffffffffffffff811115613693575f80fd5b61369f85828601613624565b90969095509350505050565b5f805f80608085870312156136be575f80fd5b84356136c981613459565b935060208501356136d9816133c3565b925060408501356136e981613459565b9150606085013567ffffffffffffffff811115613704575f80fd5b6137108782880161352b565b91505092959194509250565b5f6020828403121561372c575f80fd5b813567ffffffffffffffff811115613742575f80fd5b6121498482850161352b565b5f805f60408486031215613760575f80fd5b833567ffffffffffffffff80821115613777575f80fd5b818601915086601f83011261378a575f80fd5b813581811115613798575f80fd5b8760208285010111156137a9575f80fd5b6020928301989097509590910135949350505050565b5f805f604084860312156137d1575f80fd5b833567ffffffffffffffff8111156137e7575f80fd5b6137f386828701613624565b9094509250506020840135613418816133c3565b5f60208284031215613817575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561386c5761386c61381e565b5092915050565b5f826138a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806138bf57607f821691505b6020821081036138f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f6020828403121561390c575f80fd5b815180151581146133a4575f80fd5b5f6020828403121561392b575f80fd5b815167ffffffffffffffff811115613941575f80fd5b8201601f81018413613951575f80fd5b805161395f613548826134e6565b818152856020838501011115613973575f80fd5b613984826020830160208601613327565b95945050505050565b5f806040838503121561399e575f80fd5b82516139a981613459565b60208401519092506139ba816133c3565b809150509250929050565b818103818111156139d8576139d861381e565b92915050565b5f602082840312156139ee575f80fd5b81516133a4816133ab565b601f821115613048575f81815260208120601f850160051c81016020861015613a1f5750805b601f850160051c820191505b8181101561276b57828155600101613a2b565b815167ffffffffffffffff811115613a5857613a5861346a565b613a6c81613a6684546138ab565b846139f9565b602080601f831160018114613abe575f8415613a885750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561276b565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b0a57888601518255948401946001909101908401613aeb565b5085821015613b4657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613b686060830186613349565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561386c5761386c61381e565b808201808211156139d8576139d861381e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c27575f80fd5b9190910192915050565b5f60808236031215613c41575f80fd5b6040516080810167ffffffffffffffff8282108183111715613c6557613c6561346a565b816040528435915080821115613c79575f80fd5b50613c863682860161352b565b825250602083013560208201526040830135613ca1816133ab565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613cd357613cd361381e565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0d57613d0d61381e565b5060010190565b80820281158282048414176139d8576139d861381e565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613d8160c0830184613349565b98975050505050505050565b61ffff81811683821601908082111561386c5761386c61381e565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e10816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613e53816017840160208b01613327565b808201915050818660f81b16601782015284519150613e79826018830160208801613327565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613ef2816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f35816017840160208b01613327565b808201915050818660f01b16601782015284519150613f5b826019830160208801613327565b016019019998505050505050505050565b5f8651613f7d818460208b01613327565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613c2781846020870161332756fea2646970667358221220653ffb5e98ef8f4cb65dbc721b2b1de15bbaaf35b969af0c0c960621f7e4d3aa64736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102cc575f3560e01c80637a5460c51161017c578063c7fffd4b116100dd578063e46761c411610093578063ecef3f991161006e578063ecef3f991461076e578063f35dda4714610781578063f851a44014610789575f80fd5b8063e46761c414610720578063e7a7ed0214610747578063eaeb077b1461075b575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106ce578063d02103ca146106ee578063d7bc90ff14610715575f80fd5b8063c7fffd4b146106b3578063c89e42df146106bb575f80fd5b8063a3c573eb11610132578063ada8f91911610118578063ada8f9191461066c578063b0afe1541461067f578063c754c7ed1461068b575f80fd5b8063a3c573eb14610632578063a652f26c14610659575f80fd5b806391cafe321161016257806391cafe32146105f15780639e001877146106045780639f26f8401461061f575f80fd5b80637a5460c5146105ad5780638c3d7301146105e9575f80fd5b806340b5de6c11610231578063542028d5116101e75780636e05d2cd116101c25780636e05d2cd1461057e5780636ff512cc14610587578063712570221461059a575f80fd5b8063542028d51461054f578063676870d2146105575780636b8616ce1461055f575f80fd5b806349b7b8021161021757806349b7b802146104d95780634e4877061461050057806352bdeb6d14610513575f80fd5b806340b5de6c1461044857806345605267146104a0575f80fd5b8063267822471161028657806332c2d1531161026c57806332c2d153146103d65780633c351e10146103eb5780633cbc795b1461040b575f80fd5b806326782247146103715780632c111c06146103b6575f80fd5b806305835f37116102b657806305835f3714610306578063107bf28c1461034f57806311e892d414610357575f80fd5b8062d0295d146102d057806303508963146102eb575b5f80fd5b6102d86107ae565b6040519081526020015b60405180910390f35b6102f3602081565b60405161ffff90911681526020016102e2565b6103426040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102e29190613392565b6103426108b4565b61035f60f981565b60405160ff90911681526020016102e2565b6001546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6008546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103e96103e43660046133e4565b610940565b005b6009546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104339074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102e2565b61046f7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102e2565b6007546104c09068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103e961050e366004613423565b610a0f565b6103426040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610342610c1e565b6102f3601f81565b6102d861056d366004613423565b60066020525f908152604090205481565b6102d860055481565b6103e961059536600461343e565b610c2b565b6103e96105a836600461357d565b610cf4565b6103426040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103e96114fd565b6103e96105ff36600461343e565b6115cf565b61039173a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103e961062d36600461366c565b6116e7565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103426106673660046136ab565b611d73565b6103e961067a36600461343e565b612151565b6102d86405ca1ab1e081565b6007546104c090700100000000000000000000000000000000900467ffffffffffffffff1681565b61035f60e481565b6103e96106c936600461371c565b61221a565b6002546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6102d8635ca1ab1e81565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6007546104c09067ffffffffffffffff1681565b6103e961076936600461374e565b6122ac565b6103e961077c3660046137bf565b612773565b61035f601b81565b5f546103919062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e9190613807565b6007549091505f906108889067ffffffffffffffff6801000000000000000082048116911661384b565b67ffffffffffffffff169050805f036108a3575f9250505090565b6108ad8183613873565b9250505090565b600480546108c1906138ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906138ab565b80156109385780601f1061090f57610100808354040283529160200191610938565b820191905f5260205f20905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109af576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a0291815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a65576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610aac576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3991906138fc565b610b9a5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610b9a576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108c1906138ab565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c81576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d63576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d8157505f54600160ff909116105b80610d9a5750303b158015610d9a57505f5460ff166001145b610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e87575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110e4576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f73919081019061391b565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611005573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611029919061398d565b915091508163ffffffff165f146110a0576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110e1565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061112b90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d73565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190613807565b90505f808483858f6111dd6001436139c5565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611323573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134791906139de565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113d79190613a3e565b5060046113e48982613a3e565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161148493929190613b56565b60405180910390a150505050505080156114f4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461154e576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611625576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611674576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c13565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611725575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561175c576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ee91906139de565b6117f89190613b94565b67ffffffffffffffff16111561183a576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611875576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118b1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118d991849168010000000000000000900416613bb5565b1115611911576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bac575f87878381811061194c5761194c613bc8565b905060200281019061195e9190613bf5565b61196790613c31565b90508361197381613cb7565b825180516020918201208185015160408087015160608801519151959a509295505f946119df948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a67576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a8b6001886139c5565b8403611afa5742600760109054906101000a900467ffffffffffffffff168460400151611ab89190613b94565b67ffffffffffffffff161115611afa576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611ba490613cdd565b915050611931565b50611c227f000000000000000000000000000000000000000000000000000000000000000084611bda6107ae565b611be49190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612f74565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611cf3908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3391906139de565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611da596959493929190613d2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611ef55760f9601f8351611e399190613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611edf9796959493929190613da8565b6040516020818303038152906040529050611ff9565b815161ffff1015611f32576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f41602083613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611fe69796959493929190613e8a565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612057573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120cf576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121149084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613f6c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121a7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c13565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612270576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361227c8282613a3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c139190613392565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906122ea575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612321576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906138fc565b156123e5576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124739190613807565b9050828111156124af576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888411156124eb576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252d73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461304d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bb9190613807565b6007805491925067ffffffffffffffff909116905f6125d983613cb7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612610929190613fc7565b60405190819003902081426126266001436139c5565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361271c576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a261276b565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061276290849033908b908b90613fd6565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146127c4576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036127ff576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561283b576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156128a0575f80fd5b505af11580156128b2573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612920573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129449190613807565b60075460055491925042916801000000000000000090910467ffffffffffffffff1690815f5b86811015612c65575f8a8a8381811061298557612985613bc8565b90506020028101906129979190613bf5565b6129a090613c31565b8051805160209091012060408201519192509067ffffffffffffffff1615612b8057856129cc81613cb7565b9650505f81836020015184604001518560600151604051602001612a2e9493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612ab6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612c50565b8151516201d4c01015612bbf576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612c5d90613cdd565b91505061296a565b5060075467ffffffffffffffff9081169084161115612cb0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612d65575f612cd5838661384b565b9050612ceb67ffffffffffffffff8216836139c5565b9150612d247f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bda6107ae565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612e61337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e189190613807565b612e229190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061304d565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612efd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2191906139de565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612f5f91815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b1565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526130ab9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612fc6565b50505050565b5f613112826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131bc9092919063ffffffff16565b805190915015613048578080602001905181019061313091906138fc565b613048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e22565b606061214984845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516131ee9190614046565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b509150915061323e87838387613249565b979650505050505050565b606083156132de5782515f036132d75773ffffffffffffffffffffffffffffffffffffffff85163b6132d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e22565b5081612149565b61214983838151156132f35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229190613392565b5f5b83811015613341578181015183820152602001613329565b50505f910152565b5f8151808452613360816020860160208601613327565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6133a46020830184613349565b9392505050565b67ffffffffffffffff811681146133c0575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146133c0575f80fd5b5f805f606084860312156133f6575f80fd5b8335613401816133ab565b9250602084013591506040840135613418816133c3565b809150509250925092565b5f60208284031215613433575f80fd5b81356133a4816133ab565b5f6020828403121561344e575f80fd5b81356133a4816133c3565b63ffffffff811681146133c0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134de576134de61346a565b604052919050565b5f67ffffffffffffffff8211156134ff576134ff61346a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261353a575f80fd5b813561354d613548826134e6565b613497565b818152846020838601011115613561575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613592575f80fd5b863561359d816133c3565b955060208701356135ad816133c3565b945060408701356135bd81613459565b935060608701356135cd816133c3565b9250608087013567ffffffffffffffff808211156135e9575f80fd5b6135f58a838b0161352b565b935060a089013591508082111561360a575f80fd5b5061361789828a0161352b565b9150509295509295509295565b5f8083601f840112613634575f80fd5b50813567ffffffffffffffff81111561364b575f80fd5b6020830191508360208260051b8501011115613665575f80fd5b9250929050565b5f806020838503121561367d575f80fd5b823567ffffffffffffffff811115613693575f80fd5b61369f85828601613624565b90969095509350505050565b5f805f80608085870312156136be575f80fd5b84356136c981613459565b935060208501356136d9816133c3565b925060408501356136e981613459565b9150606085013567ffffffffffffffff811115613704575f80fd5b6137108782880161352b565b91505092959194509250565b5f6020828403121561372c575f80fd5b813567ffffffffffffffff811115613742575f80fd5b6121498482850161352b565b5f805f60408486031215613760575f80fd5b833567ffffffffffffffff80821115613777575f80fd5b818601915086601f83011261378a575f80fd5b813581811115613798575f80fd5b8760208285010111156137a9575f80fd5b6020928301989097509590910135949350505050565b5f805f604084860312156137d1575f80fd5b833567ffffffffffffffff8111156137e7575f80fd5b6137f386828701613624565b9094509250506020840135613418816133c3565b5f60208284031215613817575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561386c5761386c61381e565b5092915050565b5f826138a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806138bf57607f821691505b6020821081036138f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f6020828403121561390c575f80fd5b815180151581146133a4575f80fd5b5f6020828403121561392b575f80fd5b815167ffffffffffffffff811115613941575f80fd5b8201601f81018413613951575f80fd5b805161395f613548826134e6565b818152856020838501011115613973575f80fd5b613984826020830160208601613327565b95945050505050565b5f806040838503121561399e575f80fd5b82516139a981613459565b60208401519092506139ba816133c3565b809150509250929050565b818103818111156139d8576139d861381e565b92915050565b5f602082840312156139ee575f80fd5b81516133a4816133ab565b601f821115613048575f81815260208120601f850160051c81016020861015613a1f5750805b601f850160051c820191505b8181101561276b57828155600101613a2b565b815167ffffffffffffffff811115613a5857613a5861346a565b613a6c81613a6684546138ab565b846139f9565b602080601f831160018114613abe575f8415613a885750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561276b565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b0a57888601518255948401946001909101908401613aeb565b5085821015613b4657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613b686060830186613349565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561386c5761386c61381e565b808201808211156139d8576139d861381e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c27575f80fd5b9190910192915050565b5f60808236031215613c41575f80fd5b6040516080810167ffffffffffffffff8282108183111715613c6557613c6561346a565b816040528435915080821115613c79575f80fd5b50613c863682860161352b565b825250602083013560208201526040830135613ca1816133ab565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613cd357613cd361381e565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0d57613d0d61381e565b5060010190565b80820281158282048414176139d8576139d861381e565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613d8160c0830184613349565b98975050505050505050565b61ffff81811683821601908082111561386c5761386c61381e565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e10816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613e53816017840160208b01613327565b808201915050818660f81b16601782015284519150613e79826018830160208801613327565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613ef2816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f35816017840160208b01613327565b808201915050818660f01b16601782015284519150613f5b826019830160208801613327565b016019019998505050505050505050565b5f8651613f7d818460208b01613327565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613c2781846020870161332756fea2646970667358221220653ffb5e98ef8f4cb65dbc721b2b1de15bbaaf35b969af0c0c960621f7e4d3aa64736f6c63430008140033", + "bytecode": "0x61010060405234801562000011575f80fd5b50604051620042443803806200424483398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e05161408d620001b75f395f81816104de0152818161094201528181610aae01528181610cf6015281816112c80152818161176301528181611bb201528181611ca701528181612323015281816123e801528181612cf201528181612d6b01528181612d8d0152612ea201525f818161063701528181610eea01528181610fbf01528181611e7101528181611f79015261283d01525f81816106f30152818161113f0152818161253001526128b901525f8181610725015281816107f501528181611bfb015281816125050152612e39015261408d5ff3fe608060405234801561000f575f80fd5b50600436106102cc575f3560e01c80637a5460c51161017c578063c7fffd4b116100dd578063e46761c411610093578063ecef3f991161006e578063ecef3f991461076e578063f35dda4714610781578063f851a44014610789575f80fd5b8063e46761c414610720578063e7a7ed0214610747578063eaeb077b1461075b575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106ce578063d02103ca146106ee578063d7bc90ff14610715575f80fd5b8063c7fffd4b146106b3578063c89e42df146106bb575f80fd5b8063a3c573eb11610132578063ada8f91911610118578063ada8f9191461066c578063b0afe1541461067f578063c754c7ed1461068b575f80fd5b8063a3c573eb14610632578063a652f26c14610659575f80fd5b806391cafe321161016257806391cafe32146105f15780639e001877146106045780639f26f8401461061f575f80fd5b80637a5460c5146105ad5780638c3d7301146105e9575f80fd5b806340b5de6c11610231578063542028d5116101e75780636e05d2cd116101c25780636e05d2cd1461057e5780636ff512cc14610587578063712570221461059a575f80fd5b8063542028d51461054f578063676870d2146105575780636b8616ce1461055f575f80fd5b806349b7b8021161021757806349b7b802146104d95780634e4877061461050057806352bdeb6d14610513575f80fd5b806340b5de6c1461044857806345605267146104a0575f80fd5b8063267822471161028657806332c2d1531161026c57806332c2d153146103d65780633c351e10146103eb5780633cbc795b1461040b575f80fd5b806326782247146103715780632c111c06146103b6575f80fd5b806305835f37116102b657806305835f3714610306578063107bf28c1461034f57806311e892d414610357575f80fd5b8062d0295d146102d057806303508963146102eb575b5f80fd5b6102d86107ae565b6040519081526020015b60405180910390f35b6102f3602081565b60405161ffff90911681526020016102e2565b6103426040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102e29190613392565b6103426108b4565b61035f60f981565b60405160ff90911681526020016102e2565b6001546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6008546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103e96103e43660046133e4565b610940565b005b6009546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104339074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102e2565b61046f7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102e2565b6007546104c09068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103e961050e366004613423565b610a0f565b6103426040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610342610c1e565b6102f3601f81565b6102d861056d366004613423565b60066020525f908152604090205481565b6102d860055481565b6103e961059536600461343e565b610c2b565b6103e96105a836600461357d565b610cf4565b6103426040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103e96114fd565b6103e96105ff36600461343e565b6115cf565b61039173a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103e961062d36600461366c565b6116e7565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103426106673660046136ab565b611d73565b6103e961067a36600461343e565b612151565b6102d86405ca1ab1e081565b6007546104c090700100000000000000000000000000000000900467ffffffffffffffff1681565b61035f60e481565b6103e96106c936600461371c565b61221a565b6002546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6102d8635ca1ab1e81565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6007546104c09067ffffffffffffffff1681565b6103e961076936600461374e565b6122ac565b6103e961077c3660046137bf565b612773565b61035f601b81565b5f546103919062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e9190613807565b6007549091505f906108889067ffffffffffffffff6801000000000000000082048116911661384b565b67ffffffffffffffff169050805f036108a3575f9250505090565b6108ad8183613873565b9250505090565b600480546108c1906138ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906138ab565b80156109385780601f1061090f57610100808354040283529160200191610938565b820191905f5260205f20905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109af576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a0291815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a65576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610aac576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3991906138fc565b610b9a5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610b9a576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108c1906138ab565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c81576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d63576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d8157505f54600160ff909116105b80610d9a5750303b158015610d9a57505f5460ff166001145b610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e87575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110e4576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f73919081019061391b565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611005573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611029919061398d565b915091508163ffffffff165f146110a0576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110e1565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061112b90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d73565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190613807565b90505f808483858f6111dd6001436139c5565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611323573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134791906139de565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113d79190613a3e565b5060046113e48982613a3e565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161148493929190613b56565b60405180910390a150505050505080156114f4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461154e576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611625576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611674576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c13565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611725575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561175c576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ee91906139de565b6117f89190613b94565b67ffffffffffffffff16111561183a576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611875576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118b1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118d991849168010000000000000000900416613bb5565b1115611911576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bac575f87878381811061194c5761194c613bc8565b905060200281019061195e9190613bf5565b61196790613c31565b90508361197381613cb7565b825180516020918201208185015160408087015160608801519151959a509295505f946119df948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a67576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a8b6001886139c5565b8403611afa5742600760109054906101000a900467ffffffffffffffff168460400151611ab89190613b94565b67ffffffffffffffff161115611afa576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611ba490613cdd565b915050611931565b50611c227f000000000000000000000000000000000000000000000000000000000000000084611bda6107ae565b611be49190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612f74565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611cf3908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3391906139de565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611da596959493929190613d2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611ef55760f9601f8351611e399190613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611edf9796959493929190613da8565b6040516020818303038152906040529050611ff9565b815161ffff1015611f32576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f41602083613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611fe69796959493929190613e8a565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612057573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120cf576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121149084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613f6c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121a7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c13565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612270576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361227c8282613a3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c139190613392565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906122ea575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612321576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906138fc565b156123e5576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124739190613807565b9050828111156124af576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888411156124eb576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252d73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461304d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bb9190613807565b6007805491925067ffffffffffffffff909116905f6125d983613cb7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612610929190613fc7565b60405190819003902081426126266001436139c5565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361271c576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a261276b565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061276290849033908b908b90613fd6565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146127c4576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036127ff576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561283b576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156128a0575f80fd5b505af11580156128b2573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612920573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129449190613807565b60075460055491925042916801000000000000000090910467ffffffffffffffff1690815f5b86811015612c65575f8a8a8381811061298557612985613bc8565b90506020028101906129979190613bf5565b6129a090613c31565b8051805160209091012060408201519192509067ffffffffffffffff1615612b8057856129cc81613cb7565b9650505f81836020015184604001518560600151604051602001612a2e9493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612ab6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612c50565b8151516201d4c01015612bbf576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612c5d90613cdd565b91505061296a565b5060075467ffffffffffffffff9081169084161115612cb0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612d65575f612cd5838661384b565b9050612ceb67ffffffffffffffff8216836139c5565b9150612d247f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bda6107ae565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612e61337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e189190613807565b612e229190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061304d565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612efd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2191906139de565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612f5f91815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b1565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526130ab9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612fc6565b50505050565b5f613112826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131bc9092919063ffffffff16565b805190915015613048578080602001905181019061313091906138fc565b613048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e22565b606061214984845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516131ee9190614046565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b509150915061323e87838387613249565b979650505050505050565b606083156132de5782515f036132d75773ffffffffffffffffffffffffffffffffffffffff85163b6132d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e22565b5081612149565b61214983838151156132f35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229190613392565b5f5b83811015613341578181015183820152602001613329565b50505f910152565b5f8151808452613360816020860160208601613327565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6133a46020830184613349565b9392505050565b67ffffffffffffffff811681146133c0575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146133c0575f80fd5b5f805f606084860312156133f6575f80fd5b8335613401816133ab565b9250602084013591506040840135613418816133c3565b809150509250925092565b5f60208284031215613433575f80fd5b81356133a4816133ab565b5f6020828403121561344e575f80fd5b81356133a4816133c3565b63ffffffff811681146133c0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134de576134de61346a565b604052919050565b5f67ffffffffffffffff8211156134ff576134ff61346a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261353a575f80fd5b813561354d613548826134e6565b613497565b818152846020838601011115613561575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613592575f80fd5b863561359d816133c3565b955060208701356135ad816133c3565b945060408701356135bd81613459565b935060608701356135cd816133c3565b9250608087013567ffffffffffffffff808211156135e9575f80fd5b6135f58a838b0161352b565b935060a089013591508082111561360a575f80fd5b5061361789828a0161352b565b9150509295509295509295565b5f8083601f840112613634575f80fd5b50813567ffffffffffffffff81111561364b575f80fd5b6020830191508360208260051b8501011115613665575f80fd5b9250929050565b5f806020838503121561367d575f80fd5b823567ffffffffffffffff811115613693575f80fd5b61369f85828601613624565b90969095509350505050565b5f805f80608085870312156136be575f80fd5b84356136c981613459565b935060208501356136d9816133c3565b925060408501356136e981613459565b9150606085013567ffffffffffffffff811115613704575f80fd5b6137108782880161352b565b91505092959194509250565b5f6020828403121561372c575f80fd5b813567ffffffffffffffff811115613742575f80fd5b6121498482850161352b565b5f805f60408486031215613760575f80fd5b833567ffffffffffffffff80821115613777575f80fd5b818601915086601f83011261378a575f80fd5b813581811115613798575f80fd5b8760208285010111156137a9575f80fd5b6020928301989097509590910135949350505050565b5f805f604084860312156137d1575f80fd5b833567ffffffffffffffff8111156137e7575f80fd5b6137f386828701613624565b9094509250506020840135613418816133c3565b5f60208284031215613817575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561386c5761386c61381e565b5092915050565b5f826138a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806138bf57607f821691505b6020821081036138f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f6020828403121561390c575f80fd5b815180151581146133a4575f80fd5b5f6020828403121561392b575f80fd5b815167ffffffffffffffff811115613941575f80fd5b8201601f81018413613951575f80fd5b805161395f613548826134e6565b818152856020838501011115613973575f80fd5b613984826020830160208601613327565b95945050505050565b5f806040838503121561399e575f80fd5b82516139a981613459565b60208401519092506139ba816133c3565b809150509250929050565b818103818111156139d8576139d861381e565b92915050565b5f602082840312156139ee575f80fd5b81516133a4816133ab565b601f821115613048575f81815260208120601f850160051c81016020861015613a1f5750805b601f850160051c820191505b8181101561276b57828155600101613a2b565b815167ffffffffffffffff811115613a5857613a5861346a565b613a6c81613a6684546138ab565b846139f9565b602080601f831160018114613abe575f8415613a885750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561276b565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b0a57888601518255948401946001909101908401613aeb565b5085821015613b4657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613b686060830186613349565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561386c5761386c61381e565b808201808211156139d8576139d861381e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c27575f80fd5b9190910192915050565b5f60808236031215613c41575f80fd5b6040516080810167ffffffffffffffff8282108183111715613c6557613c6561346a565b816040528435915080821115613c79575f80fd5b50613c863682860161352b565b825250602083013560208201526040830135613ca1816133ab565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613cd357613cd361381e565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0d57613d0d61381e565b5060010190565b80820281158282048414176139d8576139d861381e565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613d8160c0830184613349565b98975050505050505050565b61ffff81811683821601908082111561386c5761386c61381e565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e10816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613e53816017840160208b01613327565b808201915050818660f81b16601782015284519150613e79826018830160208801613327565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613ef2816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f35816017840160208b01613327565b808201915050818660f01b16601782015284519150613f5b826019830160208801613327565b016019019998505050505050505050565b5f8651613f7d818460208b01613327565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613c2781846020870161332756fea2646970667358221220fe6aeb71b56662d290791f6a1324488b174587bd38fc3d970c536604115c100864736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102cc575f3560e01c80637a5460c51161017c578063c7fffd4b116100dd578063e46761c411610093578063ecef3f991161006e578063ecef3f991461076e578063f35dda4714610781578063f851a44014610789575f80fd5b8063e46761c414610720578063e7a7ed0214610747578063eaeb077b1461075b575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106ce578063d02103ca146106ee578063d7bc90ff14610715575f80fd5b8063c7fffd4b146106b3578063c89e42df146106bb575f80fd5b8063a3c573eb11610132578063ada8f91911610118578063ada8f9191461066c578063b0afe1541461067f578063c754c7ed1461068b575f80fd5b8063a3c573eb14610632578063a652f26c14610659575f80fd5b806391cafe321161016257806391cafe32146105f15780639e001877146106045780639f26f8401461061f575f80fd5b80637a5460c5146105ad5780638c3d7301146105e9575f80fd5b806340b5de6c11610231578063542028d5116101e75780636e05d2cd116101c25780636e05d2cd1461057e5780636ff512cc14610587578063712570221461059a575f80fd5b8063542028d51461054f578063676870d2146105575780636b8616ce1461055f575f80fd5b806349b7b8021161021757806349b7b802146104d95780634e4877061461050057806352bdeb6d14610513575f80fd5b806340b5de6c1461044857806345605267146104a0575f80fd5b8063267822471161028657806332c2d1531161026c57806332c2d153146103d65780633c351e10146103eb5780633cbc795b1461040b575f80fd5b806326782247146103715780632c111c06146103b6575f80fd5b806305835f37116102b657806305835f3714610306578063107bf28c1461034f57806311e892d414610357575f80fd5b8062d0295d146102d057806303508963146102eb575b5f80fd5b6102d86107ae565b6040519081526020015b60405180910390f35b6102f3602081565b60405161ffff90911681526020016102e2565b6103426040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102e29190613392565b6103426108b4565b61035f60f981565b60405160ff90911681526020016102e2565b6001546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6008546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103e96103e43660046133e4565b610940565b005b6009546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104339074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102e2565b61046f7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102e2565b6007546104c09068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103e961050e366004613423565b610a0f565b6103426040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610342610c1e565b6102f3601f81565b6102d861056d366004613423565b60066020525f908152604090205481565b6102d860055481565b6103e961059536600461343e565b610c2b565b6103e96105a836600461357d565b610cf4565b6103426040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103e96114fd565b6103e96105ff36600461343e565b6115cf565b61039173a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103e961062d36600461366c565b6116e7565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103426106673660046136ab565b611d73565b6103e961067a36600461343e565b612151565b6102d86405ca1ab1e081565b6007546104c090700100000000000000000000000000000000900467ffffffffffffffff1681565b61035f60e481565b6103e96106c936600461371c565b61221a565b6002546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6102d8635ca1ab1e81565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6007546104c09067ffffffffffffffff1681565b6103e961076936600461374e565b6122ac565b6103e961077c3660046137bf565b612773565b61035f601b81565b5f546103919062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e9190613807565b6007549091505f906108889067ffffffffffffffff6801000000000000000082048116911661384b565b67ffffffffffffffff169050805f036108a3575f9250505090565b6108ad8183613873565b9250505090565b600480546108c1906138ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906138ab565b80156109385780601f1061090f57610100808354040283529160200191610938565b820191905f5260205f20905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109af576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a0291815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a65576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610aac576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3991906138fc565b610b9a5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610b9a576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108c1906138ab565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c81576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d63576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d8157505f54600160ff909116105b80610d9a5750303b158015610d9a57505f5460ff166001145b610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e87575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110e4576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f73919081019061391b565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611005573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611029919061398d565b915091508163ffffffff165f146110a0576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110e1565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061112b90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d73565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190613807565b90505f808483858f6111dd6001436139c5565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611323573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134791906139de565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113d79190613a3e565b5060046113e48982613a3e565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161148493929190613b56565b60405180910390a150505050505080156114f4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461154e576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611625576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611674576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c13565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611725575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561175c576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ee91906139de565b6117f89190613b94565b67ffffffffffffffff16111561183a576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611875576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118b1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118d991849168010000000000000000900416613bb5565b1115611911576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bac575f87878381811061194c5761194c613bc8565b905060200281019061195e9190613bf5565b61196790613c31565b90508361197381613cb7565b825180516020918201208185015160408087015160608801519151959a509295505f946119df948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a67576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a8b6001886139c5565b8403611afa5742600760109054906101000a900467ffffffffffffffff168460400151611ab89190613b94565b67ffffffffffffffff161115611afa576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611ba490613cdd565b915050611931565b50611c227f000000000000000000000000000000000000000000000000000000000000000084611bda6107ae565b611be49190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612f74565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611cf3908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3391906139de565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611da596959493929190613d2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611ef55760f9601f8351611e399190613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611edf9796959493929190613da8565b6040516020818303038152906040529050611ff9565b815161ffff1015611f32576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f41602083613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611fe69796959493929190613e8a565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612057573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120cf576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121149084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613f6c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121a7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c13565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612270576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361227c8282613a3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c139190613392565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906122ea575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612321576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906138fc565b156123e5576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124739190613807565b9050828111156124af576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888411156124eb576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252d73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461304d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bb9190613807565b6007805491925067ffffffffffffffff909116905f6125d983613cb7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612610929190613fc7565b60405190819003902081426126266001436139c5565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361271c576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a261276b565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061276290849033908b908b90613fd6565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146127c4576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036127ff576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561283b576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156128a0575f80fd5b505af11580156128b2573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612920573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129449190613807565b60075460055491925042916801000000000000000090910467ffffffffffffffff1690815f5b86811015612c65575f8a8a8381811061298557612985613bc8565b90506020028101906129979190613bf5565b6129a090613c31565b8051805160209091012060408201519192509067ffffffffffffffff1615612b8057856129cc81613cb7565b9650505f81836020015184604001518560600151604051602001612a2e9493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612ab6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612c50565b8151516201d4c01015612bbf576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612c5d90613cdd565b91505061296a565b5060075467ffffffffffffffff9081169084161115612cb0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612d65575f612cd5838661384b565b9050612ceb67ffffffffffffffff8216836139c5565b9150612d247f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bda6107ae565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612e61337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e189190613807565b612e229190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061304d565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612efd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2191906139de565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612f5f91815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b1565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526130ab9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612fc6565b50505050565b5f613112826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131bc9092919063ffffffff16565b805190915015613048578080602001905181019061313091906138fc565b613048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e22565b606061214984845f85855f808673ffffffffffffffffffffffffffffffffffffffff1685876040516131ee9190614046565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b509150915061323e87838387613249565b979650505050505050565b606083156132de5782515f036132d75773ffffffffffffffffffffffffffffffffffffffff85163b6132d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e22565b5081612149565b61214983838151156132f35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229190613392565b5f5b83811015613341578181015183820152602001613329565b50505f910152565b5f8151808452613360816020860160208601613327565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6133a46020830184613349565b9392505050565b67ffffffffffffffff811681146133c0575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146133c0575f80fd5b5f805f606084860312156133f6575f80fd5b8335613401816133ab565b9250602084013591506040840135613418816133c3565b809150509250925092565b5f60208284031215613433575f80fd5b81356133a4816133ab565b5f6020828403121561344e575f80fd5b81356133a4816133c3565b63ffffffff811681146133c0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134de576134de61346a565b604052919050565b5f67ffffffffffffffff8211156134ff576134ff61346a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f83011261353a575f80fd5b813561354d613548826134e6565b613497565b818152846020838601011115613561575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215613592575f80fd5b863561359d816133c3565b955060208701356135ad816133c3565b945060408701356135bd81613459565b935060608701356135cd816133c3565b9250608087013567ffffffffffffffff808211156135e9575f80fd5b6135f58a838b0161352b565b935060a089013591508082111561360a575f80fd5b5061361789828a0161352b565b9150509295509295509295565b5f8083601f840112613634575f80fd5b50813567ffffffffffffffff81111561364b575f80fd5b6020830191508360208260051b8501011115613665575f80fd5b9250929050565b5f806020838503121561367d575f80fd5b823567ffffffffffffffff811115613693575f80fd5b61369f85828601613624565b90969095509350505050565b5f805f80608085870312156136be575f80fd5b84356136c981613459565b935060208501356136d9816133c3565b925060408501356136e981613459565b9150606085013567ffffffffffffffff811115613704575f80fd5b6137108782880161352b565b91505092959194509250565b5f6020828403121561372c575f80fd5b813567ffffffffffffffff811115613742575f80fd5b6121498482850161352b565b5f805f60408486031215613760575f80fd5b833567ffffffffffffffff80821115613777575f80fd5b818601915086601f83011261378a575f80fd5b813581811115613798575f80fd5b8760208285010111156137a9575f80fd5b6020928301989097509590910135949350505050565b5f805f604084860312156137d1575f80fd5b833567ffffffffffffffff8111156137e7575f80fd5b6137f386828701613624565b9094509250506020840135613418816133c3565b5f60208284031215613817575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561386c5761386c61381e565b5092915050565b5f826138a6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c908216806138bf57607f821691505b6020821081036138f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f6020828403121561390c575f80fd5b815180151581146133a4575f80fd5b5f6020828403121561392b575f80fd5b815167ffffffffffffffff811115613941575f80fd5b8201601f81018413613951575f80fd5b805161395f613548826134e6565b818152856020838501011115613973575f80fd5b613984826020830160208601613327565b95945050505050565b5f806040838503121561399e575f80fd5b82516139a981613459565b60208401519092506139ba816133c3565b809150509250929050565b818103818111156139d8576139d861381e565b92915050565b5f602082840312156139ee575f80fd5b81516133a4816133ab565b601f821115613048575f81815260208120601f850160051c81016020861015613a1f5750805b601f850160051c820191505b8181101561276b57828155600101613a2b565b815167ffffffffffffffff811115613a5857613a5861346a565b613a6c81613a6684546138ab565b846139f9565b602080601f831160018114613abe575f8415613a885750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561276b565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b0a57888601518255948401946001909101908401613aeb565b5085821015613b4657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081525f613b686060830186613349565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff81811683821601908082111561386c5761386c61381e565b808201808211156139d8576139d861381e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c27575f80fd5b9190910192915050565b5f60808236031215613c41575f80fd5b6040516080810167ffffffffffffffff8282108183111715613c6557613c6561346a565b816040528435915080821115613c79575f80fd5b50613c863682860161352b565b825250602083013560208201526040830135613ca1816133ab565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff808316818103613cd357613cd361381e565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0d57613d0d61381e565b5060010190565b80820281158282048414176139d8576139d861381e565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613d8160c0830184613349565b98975050505050505050565b61ffff81811683821601908082111561386c5761386c61381e565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613e10816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613e53816017840160208b01613327565b808201915050818660f81b16601782015284519150613e79826018830160208801613327565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613ef2816003860160208c01613327565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f35816017840160208b01613327565b808201915050818660f01b16601782015284519150613f5b826019830160208801613327565b016019019998505050505050505050565b5f8651613f7d818460208b01613327565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f8251613c2781846020870161332756fea2646970667358221220fe6aeb71b56662d290791f6a1324488b174587bd38fc3d970c536604115c100864736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMExistentEtrog.json b/compiled-contracts/PolygonZkEVMExistentEtrog.json index 364d6f87b..d8594c2e7 100644 --- a/compiled-contracts/PolygonZkEVMExistentEtrog.json +++ b/compiled-contracts/PolygonZkEVMExistentEtrog.json @@ -1245,8 +1245,8 @@ "type": "function" } ], - "bytecode": "0x61010060405234801562000011575f80fd5b5060405162004a4438038062004a4483398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e051614878620001cc5f395f81816105070152818161098601528181610af201528181610c7101528181610fbb015281816112bd0152818161188a01528181611d25015281816121740152818161226901528181612e5401528181612ecd01528181612eef01528181613004015281816131a4015261326901525f8181610673015281816114ac01528181611581015281816124330152818161253b01526129a201525f818161073701528181610e300152818161170101528181612a1e01526133b101525f818161077c01528181610839015281816121bd01528181612f9b015261338601526148785ff3fe608060405234801561000f575f80fd5b50600436106102ed575f3560e01c80637125702211610192578063c754c7ed116100e8578063def57e5411610093578063eaeb077b1161006e578063eaeb077b146107b2578063f35dda47146107c5578063f851a440146107cd575f80fd5b8063def57e5414610764578063e46761c414610777578063e7a7ed021461079e575f80fd5b8063cfa8ed47116100c3578063cfa8ed4714610712578063d02103ca14610732578063d7bc90ff14610759575f80fd5b8063c754c7ed146106cf578063c7fffd4b146106f7578063c89e42df146106ff575f80fd5b80639f26f84011610148578063ada8f91911610123578063ada8f919146106a8578063af7f3e02146106bb578063b0afe154146106c3575f80fd5b80639f26f8401461065b578063a3c573eb1461066e578063a652f26c14610695575f80fd5b80638c3d7301116101785780638c3d73011461062557806391cafe321461062d5780639e00187714610640575f80fd5b806371257022146105d65780637a5460c5146105e9575f80fd5b806342308fab11610247578063542028d5116101fd5780636b8616ce116101d85780636b8616ce1461059b5780636e05d2cd146105ba5780636ff512cc146105c3575f80fd5b8063542028d5146105785780635d6717a514610580578063676870d214610593575f80fd5b806349b7b8021161022d57806349b7b802146105025780634e4877061461052957806352bdeb6d1461053c575f80fd5b806342308fab146104c157806345605267146104c9575f80fd5b806326782247116102a75780633c351e10116102825780633c351e101461040c5780633cbc795b1461042c57806340b5de6c14610469575f80fd5b806326782247146103925780632c111c06146103d757806332c2d153146103f7575f80fd5b806305835f37116102d757806305835f3714610327578063107bf28c1461037057806311e892d414610378575f80fd5b8062d0295d146102f1578063035089631461030c575b5f80fd5b6102f96107f2565b6040519081526020015b60405180910390f35b610314602081565b60405161ffff9091168152602001610303565b6103636040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103039190613a11565b6103636108f8565b61038060f981565b60405160ff9091168152602001610303565b6001546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b6008546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b61040a610405366004613a63565b610984565b005b6009546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104549074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610303565b6104907fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610303565b6102f9602481565b6007546104e99068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610303565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b61040a610537366004613aa2565b610a53565b6103636040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610363610c62565b61040a61058e366004613bd0565b610c6f565b610314601f81565b6102f96105a9366004613aa2565b60066020525f908152604090205481565b6102f960055481565b61040a6105d1366004613c5b565b6111f2565b61040a6105e4366004613c87565b6112bb565b6103636040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040a611abf565b61040a61063b366004613c5b565b611b91565b6103b273a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040a610669366004613d76565b611ca9565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6103636106a3366004613db5565b612335565b61040a6106b6366004613c5b565b612713565b6103636127dc565b6102f96405ca1ab1e081565b6007546104e990700100000000000000000000000000000000900467ffffffffffffffff1681565b61038060e481565b61040a61070d366004613e26565b6127f8565b6002546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6102f9635ca1ab1e81565b61040a610772366004613e58565b61288a565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6007546104e99067ffffffffffffffff1681565b61040a6107c0366004613ed0565b61312d565b610380601b81565b5f546103b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561087e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190613f41565b6007549091505f906108cc9067ffffffffffffffff68010000000000000000820481169116613f85565b67ffffffffffffffff169050805f036108e7575f9250505090565b6108f18183613fad565b9250505090565b6004805461090590613fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461093190613fe5565b801561097c5780601f106109535761010080835404028352916020019161097c565b820191905f5260205f20905b81548152906001019060200180831161095f57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109f3576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a4691815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610aa9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610af0576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7d9190614036565b610bde5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bde576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b6003805461090590613fe5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610cde576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610cfc57505f54600160ff909116105b80610d155750303b158015610d1557505f5460ff166001145b610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e02575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f6040518060a00160405280606281526020016147e16062913990505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613f41565b90505f868483858d610ece600143614055565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a919061406e565b90508b5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600390816110cb91906140ce565b5060046110d88a826140ce565b508b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fd2c80353fc15ef62c6affc7cd6b7ab5b42c43290c50be3372e55ae552cecd19c8187858e60405161117a94939291906141e6565b60405180910390a150505050505080156111ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611248576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161580801561134857505f54600160ff909116105b806113615750303b15801561136157505f5460ff166001145b6113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d9d565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611449575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156116a6576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa1580156114f0573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115359190810190614235565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa1580156115c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906142a7565b915091508163ffffffff165f14611662576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556116a3565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f906116ed90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685612335565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611768573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178c9190613f41565b90505f808483858f61179f600143614055565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156118e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611909919061406e565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161199991906140ce565b5060046119a689826140ce565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e604051611a46939291906142df565b60405180910390a15050505050508015611ab6575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611b10576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611be7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611c36576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c57565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611ce7575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611d1e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db0919061406e565b611dba919061431d565b67ffffffffffffffff161115611dfc576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611e37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611e73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611e9b9184916801000000000000000090041661433e565b1115611ed3576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b8381101561216e575f878783818110611f0e57611f0e614351565b9050602002810190611f20919061437e565b611f29906143ba565b905083611f3581614440565b825180516020918201208185015160408087015160608801519151959a509295505f94611fa1948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114612029576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f9081526006602052604081205561204d600188614055565b84036120bc5742600760109054906101000a900467ffffffffffffffff16846040015161207a919061431d565b67ffffffffffffffff1611156120bc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209450505050808061216690614466565b915050611ef3565b506121e47f00000000000000000000000000000000000000000000000000000000000000008461219c6107f2565b6121a6919061449d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906135f3565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e73906122b5908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af11580156122d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122f5919061406e565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401612367969594939291906144b4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036124b75760f9601f83516123fb9190614516565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e4876040516020016124a19796959493929190614531565b60405160208183030381529060405290506125bb565b815161ffff10156124f4576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9612503602083614516565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016125a89796959493929190614613565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612619573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612691576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906126d69084906405ca1ab1e090635ca1ab1e90601b907fff00000000000000000000000000000000000000000000000000000000000000906020016146f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612769576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c57565b6040518060a00160405280606281526020016147e16062913981565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff16331461284e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361285a82826140ce565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c579190613a11565b60025473ffffffffffffffffffffffffffffffffffffffff1633146128db576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f819003612916576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612952576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295d60244261433e565b8467ffffffffffffffff1611156129a0576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612a05575f80fd5b505af1158015612a17573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa99190613f41565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015612dc7575f8b8b83818110612ae757612ae7614351565b9050602002810190612af9919061437e565b612b02906143ba565b8051805160209091012060408201519192509067ffffffffffffffff1615612ce25785612b2e81614440565b9650505f81836020015184604001518560600151604051602001612b909493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612c18576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612db2565b8151516201d4c01015612d21576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612dbf90614466565b915050612acc565b5060075467ffffffffffffffff9081169084161115612e12576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614612ec7575f612e378386613f85565b9050612e4d67ffffffffffffffff821683614055565b9150612e867f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff1661219c6107f2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612fc3337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7a9190613f41565b612f84919061449d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906136cc565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af115801561305f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613083919061406e565b905061308f8782613f85565b67ffffffffffffffff168967ffffffffffffffff16146130db576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e7668760405161311791815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff16801580159061316b575073ffffffffffffffffffffffffffffffffffffffff81163314155b156131a2576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322f9190614036565b15613266576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f49190613f41565b905082811115613330576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61138884111561336c576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ae73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846136cc565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343c9190613f41565b6007805491925067ffffffffffffffff909116905f61345a83614440565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051613491929190614750565b60405190819003902081426134a7600143614055565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361359d576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26111ea565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906135e390849033908b908b9061475f565b60405180910390a2505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613730565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261372a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613645565b50505050565b5f613791826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661383b9092919063ffffffff16565b8051909150156136c757808060200190518101906137af9190614036565b6136c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9d565b606061270b84845f85855f808673ffffffffffffffffffffffffffffffffffffffff16858760405161386d91906147cf565b5f6040518083038185875af1925050503d805f81146138a7576040519150601f19603f3d011682016040523d82523d5f602084013e6138ac565b606091505b50915091506138bd878383876138c8565b979650505050505050565b6060831561395d5782515f036139565773ffffffffffffffffffffffffffffffffffffffff85163b613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9d565b508161270b565b61270b83838151156139725781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9190613a11565b5f5b838110156139c05781810151838201526020016139a8565b50505f910152565b5f81518084526139df8160208601602086016139a6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f613a2360208301846139c8565b9392505050565b67ffffffffffffffff81168114613a3f575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613a3f575f80fd5b5f805f60608486031215613a75575f80fd5b8335613a8081613a2a565b9250602084013591506040840135613a9781613a42565b809150509250925092565b5f60208284031215613ab2575f80fd5b8135613a2381613a2a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b3157613b31613abd565b604052919050565b5f67ffffffffffffffff821115613b5257613b52613abd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b8d575f80fd5b8135613ba0613b9b82613b39565b613aea565b818152846020838601011115613bb4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613be4575f80fd5b8535613bef81613a42565b94506020860135613bff81613a42565b9350604086013567ffffffffffffffff80821115613c1b575f80fd5b613c2789838a01613b7e565b94506060880135915080821115613c3c575f80fd5b50613c4988828901613b7e565b95989497509295608001359392505050565b5f60208284031215613c6b575f80fd5b8135613a2381613a42565b63ffffffff81168114613a3f575f80fd5b5f805f805f8060c08789031215613c9c575f80fd5b8635613ca781613a42565b95506020870135613cb781613a42565b94506040870135613cc781613c76565b93506060870135613cd781613a42565b9250608087013567ffffffffffffffff80821115613cf3575f80fd5b613cff8a838b01613b7e565b935060a0890135915080821115613d14575f80fd5b50613d2189828a01613b7e565b9150509295509295509295565b5f8083601f840112613d3e575f80fd5b50813567ffffffffffffffff811115613d55575f80fd5b6020830191508360208260051b8501011115613d6f575f80fd5b9250929050565b5f8060208385031215613d87575f80fd5b823567ffffffffffffffff811115613d9d575f80fd5b613da985828601613d2e565b90969095509350505050565b5f805f8060808587031215613dc8575f80fd5b8435613dd381613c76565b93506020850135613de381613a42565b92506040850135613df381613c76565b9150606085013567ffffffffffffffff811115613e0e575f80fd5b613e1a87828801613b7e565b91505092959194509250565b5f60208284031215613e36575f80fd5b813567ffffffffffffffff811115613e4c575f80fd5b61270b84828501613b7e565b5f805f805f60808688031215613e6c575f80fd5b853567ffffffffffffffff811115613e82575f80fd5b613e8e88828901613d2e565b9096509450506020860135613ea281613a2a565b92506040860135613eb281613a2a565b91506060860135613ec281613a42565b809150509295509295909350565b5f805f60408486031215613ee2575f80fd5b833567ffffffffffffffff80821115613ef9575f80fd5b818601915086601f830112613f0c575f80fd5b813581811115613f1a575f80fd5b876020828501011115613f2b575f80fd5b6020928301989097509590910135949350505050565b5f60208284031215613f51575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115613fa657613fa6613f58565b5092915050565b5f82613fe0577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c90821680613ff957607f821691505b602082108103614030577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614046575f80fd5b81518015158114613a23575f80fd5b8181038181111561406857614068613f58565b92915050565b5f6020828403121561407e575f80fd5b8151613a2381613a2a565b601f8211156136c7575f81815260208120601f850160051c810160208610156140af5750805b601f850160051c820191505b818110156111ea578281556001016140bb565b815167ffffffffffffffff8111156140e8576140e8613abd565b6140fc816140f68454613fe5565b84614089565b602080601f83116001811461414e575f84156141185750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556111ea565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561419a5788860151825594840194600190910190840161417b565b50858210156141d657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff85168152608060208201525f61420860808301866139c8565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b5f60208284031215614245575f80fd5b815167ffffffffffffffff81111561425b575f80fd5b8201601f8101841361426b575f80fd5b8051614279613b9b82613b39565b81815285602083850101111561428d575f80fd5b61429e8260208301602086016139a6565b95945050505050565b5f80604083850312156142b8575f80fd5b82516142c381613c76565b60208401519092506142d481613a42565b809150509250929050565b606081525f6142f160608301866139c8565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613fa657613fa6613f58565b8082018082111561406857614068613f58565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126143b0575f80fd5b9190910192915050565b5f608082360312156143ca575f80fd5b6040516080810167ffffffffffffffff82821081831117156143ee576143ee613abd565b816040528435915080821115614402575f80fd5b5061440f36828601613b7e565b82525060208301356020820152604083013561442a81613a2a565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff80831681810361445c5761445c613f58565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361449657614496613f58565b5060010190565b808202811582820484141761406857614068613f58565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a083015261450a60c08301846139c8565b98975050505050505050565b61ffff818116838216019080821115613fa657613fa6613f58565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614599816003860160208c016139a6565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600382015286516145dc816017840160208b016139a6565b808201915050818660f81b166017820152845191506146028260188301602088016139a6565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b166001840152875161467b816003860160208c016139a6565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600382015286516146be816017840160208b016139a6565b808201915050818660f01b166017820152845191506146e48260198301602088016139a6565b016019019998505050505050505050565b5f8651614706818460208b016139a6565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f82516143b08184602087016139a656fedf2a8080944d5cf5032b2a844602278b01199ed191a86c93ff8080821092808000000000000000000000000000000000000000000000000000000005ca1ab1e000000000000000000000000000000000000000000000000000000005ca1ab1e01bffa26469706673582212206e2759f55e6cedecbfc3e94755efea2f8c10b5dc3c04a436c413c62fc7fe6c3564736f6c63430008140033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102ed575f3560e01c80637125702211610192578063c754c7ed116100e8578063def57e5411610093578063eaeb077b1161006e578063eaeb077b146107b2578063f35dda47146107c5578063f851a440146107cd575f80fd5b8063def57e5414610764578063e46761c414610777578063e7a7ed021461079e575f80fd5b8063cfa8ed47116100c3578063cfa8ed4714610712578063d02103ca14610732578063d7bc90ff14610759575f80fd5b8063c754c7ed146106cf578063c7fffd4b146106f7578063c89e42df146106ff575f80fd5b80639f26f84011610148578063ada8f91911610123578063ada8f919146106a8578063af7f3e02146106bb578063b0afe154146106c3575f80fd5b80639f26f8401461065b578063a3c573eb1461066e578063a652f26c14610695575f80fd5b80638c3d7301116101785780638c3d73011461062557806391cafe321461062d5780639e00187714610640575f80fd5b806371257022146105d65780637a5460c5146105e9575f80fd5b806342308fab11610247578063542028d5116101fd5780636b8616ce116101d85780636b8616ce1461059b5780636e05d2cd146105ba5780636ff512cc146105c3575f80fd5b8063542028d5146105785780635d6717a514610580578063676870d214610593575f80fd5b806349b7b8021161022d57806349b7b802146105025780634e4877061461052957806352bdeb6d1461053c575f80fd5b806342308fab146104c157806345605267146104c9575f80fd5b806326782247116102a75780633c351e10116102825780633c351e101461040c5780633cbc795b1461042c57806340b5de6c14610469575f80fd5b806326782247146103925780632c111c06146103d757806332c2d153146103f7575f80fd5b806305835f37116102d757806305835f3714610327578063107bf28c1461037057806311e892d414610378575f80fd5b8062d0295d146102f1578063035089631461030c575b5f80fd5b6102f96107f2565b6040519081526020015b60405180910390f35b610314602081565b60405161ffff9091168152602001610303565b6103636040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103039190613a11565b6103636108f8565b61038060f981565b60405160ff9091168152602001610303565b6001546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b6008546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b61040a610405366004613a63565b610984565b005b6009546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104549074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610303565b6104907fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610303565b6102f9602481565b6007546104e99068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610303565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b61040a610537366004613aa2565b610a53565b6103636040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610363610c62565b61040a61058e366004613bd0565b610c6f565b610314601f81565b6102f96105a9366004613aa2565b60066020525f908152604090205481565b6102f960055481565b61040a6105d1366004613c5b565b6111f2565b61040a6105e4366004613c87565b6112bb565b6103636040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040a611abf565b61040a61063b366004613c5b565b611b91565b6103b273a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040a610669366004613d76565b611ca9565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6103636106a3366004613db5565b612335565b61040a6106b6366004613c5b565b612713565b6103636127dc565b6102f96405ca1ab1e081565b6007546104e990700100000000000000000000000000000000900467ffffffffffffffff1681565b61038060e481565b61040a61070d366004613e26565b6127f8565b6002546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6102f9635ca1ab1e81565b61040a610772366004613e58565b61288a565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6007546104e99067ffffffffffffffff1681565b61040a6107c0366004613ed0565b61312d565b610380601b81565b5f546103b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561087e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190613f41565b6007549091505f906108cc9067ffffffffffffffff68010000000000000000820481169116613f85565b67ffffffffffffffff169050805f036108e7575f9250505090565b6108f18183613fad565b9250505090565b6004805461090590613fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461093190613fe5565b801561097c5780601f106109535761010080835404028352916020019161097c565b820191905f5260205f20905b81548152906001019060200180831161095f57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109f3576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a4691815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610aa9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610af0576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7d9190614036565b610bde5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bde576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b6003805461090590613fe5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610cde576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610cfc57505f54600160ff909116105b80610d155750303b158015610d1557505f5460ff166001145b610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e02575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f6040518060a00160405280606281526020016147e16062913990505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613f41565b90505f868483858d610ece600143614055565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a919061406e565b90508b5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600390816110cb91906140ce565b5060046110d88a826140ce565b508b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fd2c80353fc15ef62c6affc7cd6b7ab5b42c43290c50be3372e55ae552cecd19c8187858e60405161117a94939291906141e6565b60405180910390a150505050505080156111ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611248576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161580801561134857505f54600160ff909116105b806113615750303b15801561136157505f5460ff166001145b6113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d9d565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611449575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156116a6576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa1580156114f0573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115359190810190614235565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa1580156115c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906142a7565b915091508163ffffffff165f14611662576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556116a3565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f906116ed90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685612335565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611768573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178c9190613f41565b90505f808483858f61179f600143614055565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af11580156118e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611909919061406e565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161199991906140ce565b5060046119a689826140ce565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e604051611a46939291906142df565b60405180910390a15050505050508015611ab6575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611b10576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611be7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611c36576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c57565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611ce7575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611d1e576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db0919061406e565b611dba919061431d565b67ffffffffffffffff161115611dfc576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611e37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611e73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611e9b9184916801000000000000000090041661433e565b1115611ed3576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b8381101561216e575f878783818110611f0e57611f0e614351565b9050602002810190611f20919061437e565b611f29906143ba565b905083611f3581614440565b825180516020918201208185015160408087015160608801519151959a509295505f94611fa1948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114612029576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f9081526006602052604081205561204d600188614055565b84036120bc5742600760109054906101000a900467ffffffffffffffff16846040015161207a919061431d565b67ffffffffffffffff1611156120bc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209450505050808061216690614466565b915050611ef3565b506121e47f00000000000000000000000000000000000000000000000000000000000000008461219c6107f2565b6121a6919061449d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906135f3565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e73906122b5908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af11580156122d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122f5919061406e565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401612367969594939291906144b4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036124b75760f9601f83516123fb9190614516565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e4876040516020016124a19796959493929190614531565b60405160208183030381529060405290506125bb565b815161ffff10156124f4576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9612503602083614516565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016125a89796959493929190614613565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612619573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612691576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906126d69084906405ca1ab1e090635ca1ab1e90601b907fff00000000000000000000000000000000000000000000000000000000000000906020016146f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612769576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c57565b6040518060a00160405280606281526020016147e16062913981565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff16331461284e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361285a82826140ce565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c579190613a11565b60025473ffffffffffffffffffffffffffffffffffffffff1633146128db576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f819003612916576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612952576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295d60244261433e565b8467ffffffffffffffff1611156129a0576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612a05575f80fd5b505af1158015612a17573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa99190613f41565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015612dc7575f8b8b83818110612ae757612ae7614351565b9050602002810190612af9919061437e565b612b02906143ba565b8051805160209091012060408201519192509067ffffffffffffffff1615612ce25785612b2e81614440565b9650505f81836020015184604001518560600151604051602001612b909493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612c18576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612db2565b8151516201d4c01015612d21576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612dbf90614466565b915050612acc565b5060075467ffffffffffffffff9081169084161115612e12576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614612ec7575f612e378386613f85565b9050612e4d67ffffffffffffffff821683614055565b9150612e867f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff1661219c6107f2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612fc3337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7a9190613f41565b612f84919061449d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906136cc565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af115801561305f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613083919061406e565b905061308f8782613f85565b67ffffffffffffffff168967ffffffffffffffff16146130db576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e7668760405161311791815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff16801580159061316b575073ffffffffffffffffffffffffffffffffffffffff81163314155b156131a2576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322f9190614036565b15613266576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f49190613f41565b905082811115613330576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61138884111561336c576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ae73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846136cc565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343c9190613f41565b6007805491925067ffffffffffffffff909116905f61345a83614440565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051613491929190614750565b60405190819003902081426134a7600143614055565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361359d576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26111ea565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906135e390849033908b908b9061475f565b60405180910390a2505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613730565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261372a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613645565b50505050565b5f613791826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661383b9092919063ffffffff16565b8051909150156136c757808060200190518101906137af9190614036565b6136c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9d565b606061270b84845f85855f808673ffffffffffffffffffffffffffffffffffffffff16858760405161386d91906147cf565b5f6040518083038185875af1925050503d805f81146138a7576040519150601f19603f3d011682016040523d82523d5f602084013e6138ac565b606091505b50915091506138bd878383876138c8565b979650505050505050565b6060831561395d5782515f036139565773ffffffffffffffffffffffffffffffffffffffff85163b613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9d565b508161270b565b61270b83838151156139725781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9190613a11565b5f5b838110156139c05781810151838201526020016139a8565b50505f910152565b5f81518084526139df8160208601602086016139a6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f613a2360208301846139c8565b9392505050565b67ffffffffffffffff81168114613a3f575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613a3f575f80fd5b5f805f60608486031215613a75575f80fd5b8335613a8081613a2a565b9250602084013591506040840135613a9781613a42565b809150509250925092565b5f60208284031215613ab2575f80fd5b8135613a2381613a2a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b3157613b31613abd565b604052919050565b5f67ffffffffffffffff821115613b5257613b52613abd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b8d575f80fd5b8135613ba0613b9b82613b39565b613aea565b818152846020838601011115613bb4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613be4575f80fd5b8535613bef81613a42565b94506020860135613bff81613a42565b9350604086013567ffffffffffffffff80821115613c1b575f80fd5b613c2789838a01613b7e565b94506060880135915080821115613c3c575f80fd5b50613c4988828901613b7e565b95989497509295608001359392505050565b5f60208284031215613c6b575f80fd5b8135613a2381613a42565b63ffffffff81168114613a3f575f80fd5b5f805f805f8060c08789031215613c9c575f80fd5b8635613ca781613a42565b95506020870135613cb781613a42565b94506040870135613cc781613c76565b93506060870135613cd781613a42565b9250608087013567ffffffffffffffff80821115613cf3575f80fd5b613cff8a838b01613b7e565b935060a0890135915080821115613d14575f80fd5b50613d2189828a01613b7e565b9150509295509295509295565b5f8083601f840112613d3e575f80fd5b50813567ffffffffffffffff811115613d55575f80fd5b6020830191508360208260051b8501011115613d6f575f80fd5b9250929050565b5f8060208385031215613d87575f80fd5b823567ffffffffffffffff811115613d9d575f80fd5b613da985828601613d2e565b90969095509350505050565b5f805f8060808587031215613dc8575f80fd5b8435613dd381613c76565b93506020850135613de381613a42565b92506040850135613df381613c76565b9150606085013567ffffffffffffffff811115613e0e575f80fd5b613e1a87828801613b7e565b91505092959194509250565b5f60208284031215613e36575f80fd5b813567ffffffffffffffff811115613e4c575f80fd5b61270b84828501613b7e565b5f805f805f60808688031215613e6c575f80fd5b853567ffffffffffffffff811115613e82575f80fd5b613e8e88828901613d2e565b9096509450506020860135613ea281613a2a565b92506040860135613eb281613a2a565b91506060860135613ec281613a42565b809150509295509295909350565b5f805f60408486031215613ee2575f80fd5b833567ffffffffffffffff80821115613ef9575f80fd5b818601915086601f830112613f0c575f80fd5b813581811115613f1a575f80fd5b876020828501011115613f2b575f80fd5b6020928301989097509590910135949350505050565b5f60208284031215613f51575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115613fa657613fa6613f58565b5092915050565b5f82613fe0577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c90821680613ff957607f821691505b602082108103614030577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614046575f80fd5b81518015158114613a23575f80fd5b8181038181111561406857614068613f58565b92915050565b5f6020828403121561407e575f80fd5b8151613a2381613a2a565b601f8211156136c7575f81815260208120601f850160051c810160208610156140af5750805b601f850160051c820191505b818110156111ea578281556001016140bb565b815167ffffffffffffffff8111156140e8576140e8613abd565b6140fc816140f68454613fe5565b84614089565b602080601f83116001811461414e575f84156141185750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556111ea565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561419a5788860151825594840194600190910190840161417b565b50858210156141d657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff85168152608060208201525f61420860808301866139c8565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b5f60208284031215614245575f80fd5b815167ffffffffffffffff81111561425b575f80fd5b8201601f8101841361426b575f80fd5b8051614279613b9b82613b39565b81815285602083850101111561428d575f80fd5b61429e8260208301602086016139a6565b95945050505050565b5f80604083850312156142b8575f80fd5b82516142c381613c76565b60208401519092506142d481613a42565b809150509250929050565b606081525f6142f160608301866139c8565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613fa657613fa6613f58565b8082018082111561406857614068613f58565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126143b0575f80fd5b9190910192915050565b5f608082360312156143ca575f80fd5b6040516080810167ffffffffffffffff82821081831117156143ee576143ee613abd565b816040528435915080821115614402575f80fd5b5061440f36828601613b7e565b82525060208301356020820152604083013561442a81613a2a565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff80831681810361445c5761445c613f58565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361449657614496613f58565b5060010190565b808202811582820484141761406857614068613f58565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a083015261450a60c08301846139c8565b98975050505050505050565b61ffff818116838216019080821115613fa657613fa6613f58565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614599816003860160208c016139a6565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600382015286516145dc816017840160208b016139a6565b808201915050818660f81b166017820152845191506146028260188301602088016139a6565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b166001840152875161467b816003860160208c016139a6565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b16600382015286516146be816017840160208b016139a6565b808201915050818660f01b166017820152845191506146e48260198301602088016139a6565b016019019998505050505050505050565b5f8651614706818460208b016139a6565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f82516143b08184602087016139a656fedf2a8080944d5cf5032b2a844602278b01199ed191a86c93ff8080821092808000000000000000000000000000000000000000000000000000000005ca1ab1e000000000000000000000000000000000000000000000000000000005ca1ab1e01bffa26469706673582212206e2759f55e6cedecbfc3e94755efea2f8c10b5dc3c04a436c413c62fc7fe6c3564736f6c63430008140033", + "bytecode": "0x61010060405234801562000011575f80fd5b5060405162004a5638038062004a5683398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e05161488a620001cc5f395f81816105070152818161098601528181610af201528181610c7101528181610fbb015281816112bd0152818161163a01528181611ad501528181611f240152818161201901528181612c0401528181612c7d01528181612c9f01528181612db401528181612f54015261301901525f8181610673015281816121e3015281816122eb015281816127520152818161340601526134db01525f818161073701528181610e30015281816114b1015281816127ce015261316101525f818161077c0152818161083901528181611f6d01528181612d4b0152613136015261488a5ff3fe608060405234801561000f575f80fd5b50600436106102ed575f3560e01c80637125702211610192578063c754c7ed116100e8578063def57e5411610093578063eaeb077b1161006e578063eaeb077b146107b2578063f35dda47146107c5578063f851a440146107cd575f80fd5b8063def57e5414610764578063e46761c414610777578063e7a7ed021461079e575f80fd5b8063cfa8ed47116100c3578063cfa8ed4714610712578063d02103ca14610732578063d7bc90ff14610759575f80fd5b8063c754c7ed146106cf578063c7fffd4b146106f7578063c89e42df146106ff575f80fd5b80639f26f84011610148578063ada8f91911610123578063ada8f919146106a8578063af7f3e02146106bb578063b0afe154146106c3575f80fd5b80639f26f8401461065b578063a3c573eb1461066e578063a652f26c14610695575f80fd5b80638c3d7301116101785780638c3d73011461062557806391cafe321461062d5780639e00187714610640575f80fd5b806371257022146105d65780637a5460c5146105e9575f80fd5b806342308fab11610247578063542028d5116101fd5780636b8616ce116101d85780636b8616ce1461059b5780636e05d2cd146105ba5780636ff512cc146105c3575f80fd5b8063542028d5146105785780635d6717a514610580578063676870d214610593575f80fd5b806349b7b8021161022d57806349b7b802146105025780634e4877061461052957806352bdeb6d1461053c575f80fd5b806342308fab146104c157806345605267146104c9575f80fd5b806326782247116102a75780633c351e10116102825780633c351e101461040c5780633cbc795b1461042c57806340b5de6c14610469575f80fd5b806326782247146103925780632c111c06146103d757806332c2d153146103f7575f80fd5b806305835f37116102d757806305835f3714610327578063107bf28c1461037057806311e892d414610378575f80fd5b8062d0295d146102f1578063035089631461030c575b5f80fd5b6102f96107f2565b6040519081526020015b60405180910390f35b610314602081565b60405161ffff9091168152602001610303565b6103636040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103039190613a23565b6103636108f8565b61038060f981565b60405160ff9091168152602001610303565b6001546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b6008546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b61040a610405366004613a75565b610984565b005b6009546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104549074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610303565b6104907fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610303565b6102f9602481565b6007546104e99068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610303565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b61040a610537366004613ab4565b610a53565b6103636040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610363610c62565b61040a61058e366004613be2565b610c6f565b610314601f81565b6102f96105a9366004613ab4565b60066020525f908152604090205481565b6102f960055481565b61040a6105d1366004613c6d565b6111f2565b61040a6105e4366004613c99565b6112bb565b6103636040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040a61186f565b61040a61063b366004613c6d565b611941565b6103b273a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040a610669366004613d88565b611a59565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6103636106a3366004613dc7565b6120e5565b61040a6106b6366004613c6d565b6124c3565b61036361258c565b6102f96405ca1ab1e081565b6007546104e990700100000000000000000000000000000000900467ffffffffffffffff1681565b61038060e481565b61040a61070d366004613e38565b6125a8565b6002546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6102f9635ca1ab1e81565b61040a610772366004613e6a565b61263a565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6007546104e99067ffffffffffffffff1681565b61040a6107c0366004613ee2565b612edd565b610380601b81565b5f546103b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561087e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190613f53565b6007549091505f906108cc9067ffffffffffffffff68010000000000000000820481169116613f97565b67ffffffffffffffff169050805f036108e7575f9250505090565b6108f18183613fbf565b9250505090565b6004805461090590613ff7565b80601f016020809104026020016040519081016040528092919081815260200182805461093190613ff7565b801561097c5780601f106109535761010080835404028352916020019161097c565b820191905f5260205f20905b81548152906001019060200180831161095f57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109f3576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a4691815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610aa9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610af0576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7d9190614048565b610bde5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bde576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b6003805461090590613ff7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610cde576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610cfc57505f54600160ff909116105b80610d155750303b158015610d1557505f5460ff166001145b610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e02575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f6040518060a00160405280606281526020016147f36062913990505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613f53565b90505f868483858d610ece600143614067565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a9190614080565b90508b5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600390816110cb91906140e0565b5060046110d88a826140e0565b508b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fd2c80353fc15ef62c6affc7cd6b7ab5b42c43290c50be3372e55ae552cecd19c8187858e60405161117a94939291906141f8565b60405180910390a150505050505080156111ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611248576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161580801561134857505f54600160ff909116105b806113615750303b15801561136157505f5460ff166001145b6113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d9d565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611449575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f611453856133a3565b6009549091505f9061149d90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff16856120e5565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153c9190613f53565b90505f808483858f61154f600143614067565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611695573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b99190614080565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161174991906140e0565b50600461175689826140e0565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e6040516117f693929190614247565b60405180910390a15050505050508015611866575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146118c0576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611997576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166119e6576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c57565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611a97575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611ace576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b609190614080565b611b6a9190614285565b67ffffffffffffffff161115611bac576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611be7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611c23576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611c4b918491680100000000000000009004166142a6565b1115611c83576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611f1e575f878783818110611cbe57611cbe6142b9565b9050602002810190611cd091906142e6565b611cd990614322565b905083611ce5816143a8565b825180516020918201208185015160408087015160608801519151959a509295505f94611d51948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611dd9576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611dfd600188614067565b8403611e6c5742600760109054906101000a900467ffffffffffffffff168460400151611e2a9190614285565b67ffffffffffffffff161115611e6c576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611f16906143ce565b915050611ca3565b50611f947f000000000000000000000000000000000000000000000000000000000000000084611f4c6107f2565b611f569190614405565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190613605565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390612065908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015612081573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a59190614080565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f876040516024016121179695949392919061441c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036122675760f9601f83516121ab919061447e565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e4876040516020016122519796959493929190614499565b604051602081830303815290604052905061236b565b815161ffff10156122a4576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f96122b360208361447e565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001612358979695949392919061457b565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156123c9573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612441576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906124869084906405ca1ab1e090635ca1ab1e90601b907fff000000000000000000000000000000000000000000000000000000000000009060200161465d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612519576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c57565b6040518060a00160405280606281526020016147f36062913981565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146125fe576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361260a82826140e0565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c579190613a23565b60025473ffffffffffffffffffffffffffffffffffffffff16331461268b576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036126c6576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612702576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61270d6024426142a6565b8467ffffffffffffffff161115612750576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156127b5575f80fd5b505af11580156127c7573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612835573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128599190613f53565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015612b77575f8b8b83818110612897576128976142b9565b90506020028101906128a991906142e6565b6128b290614322565b8051805160209091012060408201519192509067ffffffffffffffff1615612a9257856128de816143a8565b9650505f818360200151846040015185606001516040516020016129409493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146129c8576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612b62565b8151516201d4c01015612ad1576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612b6f906143ce565b91505061287c565b5060075467ffffffffffffffff9081169084161115612bc2576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614612c77575f612be78386613f97565b9050612bfd67ffffffffffffffff821683614067565b9150612c367f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611f4c6107f2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612d73337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613f53565b612d349190614405565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906136de565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612e0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e339190614080565b9050612e3f8782613f97565b67ffffffffffffffff168967ffffffffffffffff1614612e8b576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051612ec791815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612f1b575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612f52576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fdf9190614048565b15613016576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015613080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a49190613f53565b9050828111156130e0576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61138884111561311c576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315e73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846136de565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131ec9190613f53565b6007805491925067ffffffffffffffff909116905f61320a836143a8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505085856040516132419291906146b8565b6040519081900390208142613257600143614067565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361334d576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26111ea565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061339390849033908b908b906146c7565b60405180910390a2505050505050565b606073ffffffffffffffffffffffffffffffffffffffff821615613600576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa15801561344a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261348f9190810190614737565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015613521573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354591906147a9565b915091508163ffffffff165f146135bc576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556135fd565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136d99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613742565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261373c9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613657565b50505050565b5f6137a3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661384d9092919063ffffffff16565b8051909150156136d957808060200190518101906137c19190614048565b6136d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9d565b60606124bb84845f85855f808673ffffffffffffffffffffffffffffffffffffffff16858760405161387f91906147e1565b5f6040518083038185875af1925050503d805f81146138b9576040519150601f19603f3d011682016040523d82523d5f602084013e6138be565b606091505b50915091506138cf878383876138da565b979650505050505050565b6060831561396f5782515f036139685773ffffffffffffffffffffffffffffffffffffffff85163b613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9d565b50816124bb565b6124bb83838151156139845781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9190613a23565b5f5b838110156139d25781810151838201526020016139ba565b50505f910152565b5f81518084526139f18160208601602086016139b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f613a3560208301846139da565b9392505050565b67ffffffffffffffff81168114613a51575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613a51575f80fd5b5f805f60608486031215613a87575f80fd5b8335613a9281613a3c565b9250602084013591506040840135613aa981613a54565b809150509250925092565b5f60208284031215613ac4575f80fd5b8135613a3581613a3c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b4357613b43613acf565b604052919050565b5f67ffffffffffffffff821115613b6457613b64613acf565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b9f575f80fd5b8135613bb2613bad82613b4b565b613afc565b818152846020838601011115613bc6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613bf6575f80fd5b8535613c0181613a54565b94506020860135613c1181613a54565b9350604086013567ffffffffffffffff80821115613c2d575f80fd5b613c3989838a01613b90565b94506060880135915080821115613c4e575f80fd5b50613c5b88828901613b90565b95989497509295608001359392505050565b5f60208284031215613c7d575f80fd5b8135613a3581613a54565b63ffffffff81168114613a51575f80fd5b5f805f805f8060c08789031215613cae575f80fd5b8635613cb981613a54565b95506020870135613cc981613a54565b94506040870135613cd981613c88565b93506060870135613ce981613a54565b9250608087013567ffffffffffffffff80821115613d05575f80fd5b613d118a838b01613b90565b935060a0890135915080821115613d26575f80fd5b50613d3389828a01613b90565b9150509295509295509295565b5f8083601f840112613d50575f80fd5b50813567ffffffffffffffff811115613d67575f80fd5b6020830191508360208260051b8501011115613d81575f80fd5b9250929050565b5f8060208385031215613d99575f80fd5b823567ffffffffffffffff811115613daf575f80fd5b613dbb85828601613d40565b90969095509350505050565b5f805f8060808587031215613dda575f80fd5b8435613de581613c88565b93506020850135613df581613a54565b92506040850135613e0581613c88565b9150606085013567ffffffffffffffff811115613e20575f80fd5b613e2c87828801613b90565b91505092959194509250565b5f60208284031215613e48575f80fd5b813567ffffffffffffffff811115613e5e575f80fd5b6124bb84828501613b90565b5f805f805f60808688031215613e7e575f80fd5b853567ffffffffffffffff811115613e94575f80fd5b613ea088828901613d40565b9096509450506020860135613eb481613a3c565b92506040860135613ec481613a3c565b91506060860135613ed481613a54565b809150509295509295909350565b5f805f60408486031215613ef4575f80fd5b833567ffffffffffffffff80821115613f0b575f80fd5b818601915086601f830112613f1e575f80fd5b813581811115613f2c575f80fd5b876020828501011115613f3d575f80fd5b6020928301989097509590910135949350505050565b5f60208284031215613f63575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115613fb857613fb8613f6a565b5092915050565b5f82613ff2577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c9082168061400b57607f821691505b602082108103614042577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614058575f80fd5b81518015158114613a35575f80fd5b8181038181111561407a5761407a613f6a565b92915050565b5f60208284031215614090575f80fd5b8151613a3581613a3c565b601f8211156136d9575f81815260208120601f850160051c810160208610156140c15750805b601f850160051c820191505b818110156111ea578281556001016140cd565b815167ffffffffffffffff8111156140fa576140fa613acf565b61410e816141088454613ff7565b8461409b565b602080601f831160018114614160575f841561412a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556111ea565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ac5788860151825594840194600190910190840161418d565b50858210156141e857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff85168152608060208201525f61421a60808301866139da565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b606081525f61425960608301866139da565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613fb857613fb8613f6a565b8082018082111561407a5761407a613f6a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614318575f80fd5b9190910192915050565b5f60808236031215614332575f80fd5b6040516080810167ffffffffffffffff828210818311171561435657614356613acf565b81604052843591508082111561436a575f80fd5b5061437736828601613b90565b82525060208301356020820152604083013561439281613a3c565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff8083168181036143c4576143c4613f6a565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143fe576143fe613f6a565b5060010190565b808202811582820484141761407a5761407a613f6a565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a083015261447260c08301846139da565b98975050505050505050565b61ffff818116838216019080821115613fb857613fb8613f6a565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614501816003860160208c016139b8565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614544816017840160208b016139b8565b808201915050818660f81b1660178201528451915061456a8260188301602088016139b8565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b16600184015287516145e3816003860160208c016139b8565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614626816017840160208b016139b8565b808201915050818660f01b1660178201528451915061464c8260198301602088016139b8565b016019019998505050505050505050565b5f865161466e818460208b016139b8565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f60208284031215614747575f80fd5b815167ffffffffffffffff81111561475d575f80fd5b8201601f8101841361476d575f80fd5b805161477b613bad82613b4b565b81815285602083850101111561478f575f80fd5b6147a08260208301602086016139b8565b95945050505050565b5f80604083850312156147ba575f80fd5b82516147c581613c88565b60208401519092506147d681613a54565b809150509250929050565b5f82516143188184602087016139b856fedf2a8080944d5cf5032b2a844602278b01199ed191a86c93ff8080821092808000000000000000000000000000000000000000000000000000000005ca1ab1e000000000000000000000000000000000000000000000000000000005ca1ab1e01bffa26469706673582212205f7eb0c1f6419540d705e6d0820952b7eada1c659c98f5a2aaf1e215cc716ea064736f6c63430008140033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106102ed575f3560e01c80637125702211610192578063c754c7ed116100e8578063def57e5411610093578063eaeb077b1161006e578063eaeb077b146107b2578063f35dda47146107c5578063f851a440146107cd575f80fd5b8063def57e5414610764578063e46761c414610777578063e7a7ed021461079e575f80fd5b8063cfa8ed47116100c3578063cfa8ed4714610712578063d02103ca14610732578063d7bc90ff14610759575f80fd5b8063c754c7ed146106cf578063c7fffd4b146106f7578063c89e42df146106ff575f80fd5b80639f26f84011610148578063ada8f91911610123578063ada8f919146106a8578063af7f3e02146106bb578063b0afe154146106c3575f80fd5b80639f26f8401461065b578063a3c573eb1461066e578063a652f26c14610695575f80fd5b80638c3d7301116101785780638c3d73011461062557806391cafe321461062d5780639e00187714610640575f80fd5b806371257022146105d65780637a5460c5146105e9575f80fd5b806342308fab11610247578063542028d5116101fd5780636b8616ce116101d85780636b8616ce1461059b5780636e05d2cd146105ba5780636ff512cc146105c3575f80fd5b8063542028d5146105785780635d6717a514610580578063676870d214610593575f80fd5b806349b7b8021161022d57806349b7b802146105025780634e4877061461052957806352bdeb6d1461053c575f80fd5b806342308fab146104c157806345605267146104c9575f80fd5b806326782247116102a75780633c351e10116102825780633c351e101461040c5780633cbc795b1461042c57806340b5de6c14610469575f80fd5b806326782247146103925780632c111c06146103d757806332c2d153146103f7575f80fd5b806305835f37116102d757806305835f3714610327578063107bf28c1461037057806311e892d414610378575f80fd5b8062d0295d146102f1578063035089631461030c575b5f80fd5b6102f96107f2565b6040519081526020015b60405180910390f35b610314602081565b60405161ffff9091168152602001610303565b6103636040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516103039190613a23565b6103636108f8565b61038060f981565b60405160ff9091168152602001610303565b6001546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b6008546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b61040a610405366004613a75565b610984565b005b6009546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104549074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610303565b6104907fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610303565b6102f9602481565b6007546104e99068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610303565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b61040a610537366004613ab4565b610a53565b6103636040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610363610c62565b61040a61058e366004613be2565b610c6f565b610314601f81565b6102f96105a9366004613ab4565b60066020525f908152604090205481565b6102f960055481565b61040a6105d1366004613c6d565b6111f2565b61040a6105e4366004613c99565b6112bb565b6103636040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61040a61186f565b61040a61063b366004613c6d565b611941565b6103b273a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b61040a610669366004613d88565b611a59565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6103636106a3366004613dc7565b6120e5565b61040a6106b6366004613c6d565b6124c3565b61036361258c565b6102f96405ca1ab1e081565b6007546104e990700100000000000000000000000000000000900467ffffffffffffffff1681565b61038060e481565b61040a61070d366004613e38565b6125a8565b6002546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6102f9635ca1ab1e81565b61040a610772366004613e6a565b61263a565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6007546104e99067ffffffffffffffff1681565b61040a6107c0366004613ee2565b612edd565b610380601b81565b5f546103b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561087e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190613f53565b6007549091505f906108cc9067ffffffffffffffff68010000000000000000820481169116613f97565b67ffffffffffffffff169050805f036108e7575f9250505090565b6108f18183613fbf565b9250505090565b6004805461090590613ff7565b80601f016020809104026020016040519081016040528092919081815260200182805461093190613ff7565b801561097c5780601f106109535761010080835404028352916020019161097c565b820191905f5260205f20905b81548152906001019060200180831161095f57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109f3576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a4691815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610aa9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610af0576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7d9190614048565b610bde5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bde576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b6003805461090590613ff7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610cde576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610cfc57505f54600160ff909116105b80610d155750303b158015610d1557505f5460ff166001145b610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e02575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f6040518060a00160405280606281526020016147f36062913990505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613f53565b90505f868483858d610ece600143614067565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a9190614080565b90508b5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600390816110cb91906140e0565b5060046110d88a826140e0565b508b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fd2c80353fc15ef62c6affc7cd6b7ab5b42c43290c50be3372e55ae552cecd19c8187858e60405161117a94939291906141f8565b60405180910390a150505050505080156111ea575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611248576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff161580801561134857505f54600160ff909116105b806113615750303b15801561136157505f5460ff166001145b6113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d9d565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611449575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b5f611453856133a3565b6009549091505f9061149d90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff16856120e5565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153c9190613f53565b90505f808483858f61154f600143614067565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611695573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b99190614080565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886003908161174991906140e0565b50600461175689826140e0565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e6040516117f693929190614247565b60405180910390a15050505050508015611866575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146118c0576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611997576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166119e6576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c57565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611a97575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611ace576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b609190614080565b611b6a9190614285565b67ffffffffffffffff161115611bac576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611be7576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611c23576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff80821691611c4b918491680100000000000000009004166142a6565b1115611c83576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611f1e575f878783818110611cbe57611cbe6142b9565b9050602002810190611cd091906142e6565b611cd990614322565b905083611ce5816143a8565b825180516020918201208185015160408087015160608801519151959a509295505f94611d51948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611dd9576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611dfd600188614067565b8403611e6c5742600760109054906101000a900467ffffffffffffffff168460400151611e2a9190614285565b67ffffffffffffffff161115611e6c576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611f16906143ce565b915050611ca3565b50611f947f000000000000000000000000000000000000000000000000000000000000000084611f4c6107f2565b611f569190614405565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190613605565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390612065908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015612081573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a59190614080565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f876040516024016121179695949392919061441c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f036122675760f9601f83516121ab919061447e565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e4876040516020016122519796959493929190614499565b604051602081830303815290604052905061236b565b815161ffff10156122a4576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f96122b360208361447e565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001612358979695949392919061457b565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156123c9573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612441576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906124869084906405ca1ab1e090635ca1ab1e90601b907fff000000000000000000000000000000000000000000000000000000000000009060200161465d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612519576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c57565b6040518060a00160405280606281526020016147f36062913981565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146125fe576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361260a82826140e0565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c579190613a23565b60025473ffffffffffffffffffffffffffffffffffffffff16331461268b576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f8190036126c6576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612702576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61270d6024426142a6565b8467ffffffffffffffff161115612750576040517f0a00feb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156127b5575f80fd5b505af11580156127c7573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612835573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128599190613f53565b60075460055491925068010000000000000000900467ffffffffffffffff1690815f5b85811015612b77575f8b8b83818110612897576128976142b9565b90506020028101906128a991906142e6565b6128b290614322565b8051805160209091012060408201519192509067ffffffffffffffff1615612a9257856128de816143a8565b9650505f818360200151846040015185606001516040516020016129409493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f908152600690935291205490915081146129c8576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612b62565b8151516201d4c01015612ad1576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208101879052908101829052606080820189905260c08d901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612b6f906143ce565b91505061287c565b5060075467ffffffffffffffff9081169084161115612bc2576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558467ffffffffffffffff84811690831614612c77575f612be78386613f97565b9050612bfd67ffffffffffffffff821683614067565b9150612c367f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611f4c6107f2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612d73337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613f53565b612d349190614405565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906136de565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612e0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e339190614080565b9050612e3f8782613f97565b67ffffffffffffffff168967ffffffffffffffff1614612e8b576040517f1a070d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76687604051612ec791815260200190565b60405180910390a2505050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590612f1b575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612f52576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fdf9190614048565b15613016576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa158015613080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a49190613f53565b9050828111156130e0576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61138884111561311c576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61315e73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846136de565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131ec9190613f53565b6007805491925067ffffffffffffffff909116905f61320a836143a8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505085856040516132419291906146b8565b6040519081900390208142613257600143614067565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361334d576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26111ea565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061339390849033908b908b906146c7565b60405180910390a2505050505050565b606073ffffffffffffffffffffffffffffffffffffffff821615613600576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa15801561344a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261348f9190810190614737565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015613521573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354591906147a9565b915091508163ffffffff165f146135bc576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556135fd565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b50505b919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136d99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613742565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261373c9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613657565b50505050565b5f6137a3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661384d9092919063ffffffff16565b8051909150156136d957808060200190518101906137c19190614048565b6136d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9d565b60606124bb84845f85855f808673ffffffffffffffffffffffffffffffffffffffff16858760405161387f91906147e1565b5f6040518083038185875af1925050503d805f81146138b9576040519150601f19603f3d011682016040523d82523d5f602084013e6138be565b606091505b50915091506138cf878383876138da565b979650505050505050565b6060831561396f5782515f036139685773ffffffffffffffffffffffffffffffffffffffff85163b613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9d565b50816124bb565b6124bb83838151156139845781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9190613a23565b5f5b838110156139d25781810151838201526020016139ba565b50505f910152565b5f81518084526139f18160208601602086016139b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f613a3560208301846139da565b9392505050565b67ffffffffffffffff81168114613a51575f80fd5b50565b73ffffffffffffffffffffffffffffffffffffffff81168114613a51575f80fd5b5f805f60608486031215613a87575f80fd5b8335613a9281613a3c565b9250602084013591506040840135613aa981613a54565b809150509250925092565b5f60208284031215613ac4575f80fd5b8135613a3581613a3c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b4357613b43613acf565b604052919050565b5f67ffffffffffffffff821115613b6457613b64613acf565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b9f575f80fd5b8135613bb2613bad82613b4b565b613afc565b818152846020838601011115613bc6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613bf6575f80fd5b8535613c0181613a54565b94506020860135613c1181613a54565b9350604086013567ffffffffffffffff80821115613c2d575f80fd5b613c3989838a01613b90565b94506060880135915080821115613c4e575f80fd5b50613c5b88828901613b90565b95989497509295608001359392505050565b5f60208284031215613c7d575f80fd5b8135613a3581613a54565b63ffffffff81168114613a51575f80fd5b5f805f805f8060c08789031215613cae575f80fd5b8635613cb981613a54565b95506020870135613cc981613a54565b94506040870135613cd981613c88565b93506060870135613ce981613a54565b9250608087013567ffffffffffffffff80821115613d05575f80fd5b613d118a838b01613b90565b935060a0890135915080821115613d26575f80fd5b50613d3389828a01613b90565b9150509295509295509295565b5f8083601f840112613d50575f80fd5b50813567ffffffffffffffff811115613d67575f80fd5b6020830191508360208260051b8501011115613d81575f80fd5b9250929050565b5f8060208385031215613d99575f80fd5b823567ffffffffffffffff811115613daf575f80fd5b613dbb85828601613d40565b90969095509350505050565b5f805f8060808587031215613dda575f80fd5b8435613de581613c88565b93506020850135613df581613a54565b92506040850135613e0581613c88565b9150606085013567ffffffffffffffff811115613e20575f80fd5b613e2c87828801613b90565b91505092959194509250565b5f60208284031215613e48575f80fd5b813567ffffffffffffffff811115613e5e575f80fd5b6124bb84828501613b90565b5f805f805f60808688031215613e7e575f80fd5b853567ffffffffffffffff811115613e94575f80fd5b613ea088828901613d40565b9096509450506020860135613eb481613a3c565b92506040860135613ec481613a3c565b91506060860135613ed481613a54565b809150509295509295909350565b5f805f60408486031215613ef4575f80fd5b833567ffffffffffffffff80821115613f0b575f80fd5b818601915086601f830112613f1e575f80fd5b813581811115613f2c575f80fd5b876020828501011115613f3d575f80fd5b6020928301989097509590910135949350505050565b5f60208284031215613f63575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115613fb857613fb8613f6a565b5092915050565b5f82613ff2577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b600181811c9082168061400b57607f821691505b602082108103614042577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614058575f80fd5b81518015158114613a35575f80fd5b8181038181111561407a5761407a613f6a565b92915050565b5f60208284031215614090575f80fd5b8151613a3581613a3c565b601f8211156136d9575f81815260208120601f850160051c810160208610156140c15750805b601f850160051c820191505b818110156111ea578281556001016140cd565b815167ffffffffffffffff8111156140fa576140fa613acf565b61410e816141088454613ff7565b8461409b565b602080601f831160018114614160575f841561412a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556111ea565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ac5788860151825594840194600190910190840161418d565b50858210156141e857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff85168152608060208201525f61421a60808301866139da565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b606081525f61425960608301866139da565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613fb857613fb8613f6a565b8082018082111561407a5761407a613f6a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112614318575f80fd5b9190910192915050565b5f60808236031215614332575f80fd5b6040516080810167ffffffffffffffff828210818311171561435657614356613acf565b81604052843591508082111561436a575f80fd5b5061437736828601613b90565b82525060208301356020820152604083013561439281613a3c565b6040820152606092830135928101929092525090565b5f67ffffffffffffffff8083168181036143c4576143c4613f6a565b6001019392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143fe576143fe613f6a565b5060010190565b808202811582820484141761407a5761407a613f6a565b5f63ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a083015261447260c08301846139da565b98975050505050505050565b61ffff818116838216019080821115613fb857613fb8613f6a565b5f7fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751614501816003860160208c016139b8565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614544816017840160208b016139b8565b808201915050818660f81b1660178201528451915061456a8260188301602088016139b8565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681525f7fffff000000000000000000000000000000000000000000000000000000000000808960f01b16600184015287516145e3816003860160208c016139b8565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651614626816017840160208b016139b8565b808201915050818660f01b1660178201528451915061464c8260198301602088016139b8565b016019019998505050505050505050565b5f865161466e818460208b016139b8565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b818382375f9101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b5f60208284031215614747575f80fd5b815167ffffffffffffffff81111561475d575f80fd5b8201601f8101841361476d575f80fd5b805161477b613bad82613b4b565b81815285602083850101111561478f575f80fd5b6147a08260208301602086016139b8565b95945050505050565b5f80604083850312156147ba575f80fd5b82516147c581613c88565b60208401519092506147d681613a54565b809150509250929050565b5f82516143188184602087016139b856fedf2a8080944d5cf5032b2a844602278b01199ed191a86c93ff8080821092808000000000000000000000000000000000000000000000000000000005ca1ab1e000000000000000000000000000000000000000000000000000000005ca1ab1e01bffa26469706673582212205f7eb0c1f6419540d705e6d0820952b7eada1c659c98f5a2aaf1e215cc716ea064736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/verifiers/FflonkVerifier_10.sol b/contracts/verifiers/FflonkVerifier_10.sol new file mode 100644 index 000000000..536235e08 --- /dev/null +++ b/contracts/verifiers/FflonkVerifier_10.sol @@ -0,0 +1,1244 @@ +// SPDX-License-Identifier: GPL-3.0 +/* + Copyright 2021 0KIMS association. + + This file is generated with [snarkJS](https://github.com/iden3/snarkjs). + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . +*/ + +pragma solidity >=0.7.0 <0.9.0; + +contract FflonkVerifier_10 { + uint32 constant n = 16777216; // Domain size + + // Verification Key data + uint256 constant k1 = 2; // Plonk k1 multiplicative factor to force distinct cosets of H + uint256 constant k2 = 3; // Plonk k2 multiplicative factor to force distinct cosets of H + + // OMEGAS + // Omega, Omega^{1/3} + uint256 constant w1 = 5709868443893258075976348696661355716898495876243883251619397131511003808859; + uint256 constant wr = 18200100796661656210024324131237448517259556535315737226009542456080026430510; + // Omega_3, Omega_3^2 + uint256 constant w3 = 21888242871839275217838484774961031246154997185409878258781734729429964517155; + uint256 constant w3_2 = 4407920970296243842393367215006156084916469457145843978461; + // Omega_4, Omega_4^2, Omega_4^3 + uint256 constant w4 = 21888242871839275217838484774961031246007050428528088939761107053157389710902; + uint256 constant w4_2 = 21888242871839275222246405745257275088548364400416034343698204186575808495616; + uint256 constant w4_3 = 4407920970296243842541313971887945403937097133418418784715; + // Omega_8, Omega_8^2, Omega_8^3, Omega_8^4, Omega_8^5, Omega_8^6, Omega_8^7 + uint256 constant w8_1 = 19540430494807482326159819597004422086093766032135589407132600596362845576832; + uint256 constant w8_2 = 21888242871839275217838484774961031246007050428528088939761107053157389710902; + uint256 constant w8_3 = 13274704216607947843011480449124596415239537050559949017414504948711435969894; + uint256 constant w8_4 = 21888242871839275222246405745257275088548364400416034343698204186575808495616; + uint256 constant w8_5 = 2347812377031792896086586148252853002454598368280444936565603590212962918785; + uint256 constant w8_6 = 4407920970296243842541313971887945403937097133418418784715; + uint256 constant w8_7 = 8613538655231327379234925296132678673308827349856085326283699237864372525723; + + // Verifier preprocessed input C_0(x)·[1]_1 + uint256 constant C0x = 1994511655043659082795852683195380325378879257059488547998206007926469246776; + uint256 constant C0y = 21654483303940956161215913593419782322836269247276039101149437960660654437463; + + // Verifier preprocessed input x·[1]_2 + uint256 constant X2x1 = 21831381940315734285607113342023901060522397560371972897001948545212302161822; + uint256 constant X2x2 = 17231025384763736816414546592865244497437017442647097510447326538965263639101; + uint256 constant X2y1 = 2388026358213174446665280700919698872609886601280537296205114254867301080648; + uint256 constant X2y2 = 11507326595632554467052522095592665270651932854513688777769618397986436103170; + + // Scalar field size + uint256 constant q = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + // Base field size + uint256 constant qf = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + // [1]_1 + uint256 constant G1x = 1; + uint256 constant G1y = 2; + // [1]_2 + uint256 constant G2x1 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; + uint256 constant G2x2 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; + uint256 constant G2y1 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; + uint256 constant G2y2 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; + + // Proof calldata + // Byte offset of every parameter of the calldata + // Polynomial commitments + uint16 constant pC1 = 4 + 0; // [C1]_1 + uint16 constant pC2 = 4 + 32*2; // [C2]_1 + uint16 constant pW1 = 4 + 32*4; // [W]_1 + uint16 constant pW2 = 4 + 32*6; // [W']_1 + // Opening evaluations + uint16 constant pEval_ql = 4 + 32*8; // q_L(xi) + uint16 constant pEval_qr = 4 + 32*9; // q_R(xi) + uint16 constant pEval_qm = 4 + 32*10; // q_M(xi) + uint16 constant pEval_qo = 4 + 32*11; // q_O(xi) + uint16 constant pEval_qc = 4 + 32*12; // q_C(xi) + uint16 constant pEval_s1 = 4 + 32*13; // S_{sigma_1}(xi) + uint16 constant pEval_s2 = 4 + 32*14; // S_{sigma_2}(xi) + uint16 constant pEval_s3 = 4 + 32*15; // S_{sigma_3}(xi) + uint16 constant pEval_a = 4 + 32*16; // a(xi) + uint16 constant pEval_b = 4 + 32*17; // b(xi) + uint16 constant pEval_c = 4 + 32*18; // c(xi) + uint16 constant pEval_z = 4 + 32*19; // z(xi) + uint16 constant pEval_zw = 4 + 32*20; // z_omega(xi) + uint16 constant pEval_t1w = 4 + 32*21; // T_1(xi omega) + uint16 constant pEval_t2w = 4 + 32*22; // T_2(xi omega) + uint16 constant pEval_inv = 4 + 32*23; // inv(batch) sent by the prover to avoid any inverse calculation to save gas, + // we check the correctness of the inv(batch) by computing batch + // and checking inv(batch) * batch == 1 + + // Memory data + // Challenges + uint16 constant pAlpha = 0; // alpha challenge + uint16 constant pBeta = 32; // beta challenge + uint16 constant pGamma = 64; // gamma challenge + uint16 constant pY = 96; // y challenge + uint16 constant pXiSeed = 128; // xi seed, from this value we compute xi = xiSeed^24 + uint16 constant pXiSeed2 = 160; // (xi seed)^2 + uint16 constant pXi = 192; // xi challenge + + // Roots + // S_0 = roots_8(xi) = { h_0, h_0w_8, h_0w_8^2, h_0w_8^3, h_0w_8^4, h_0w_8^5, h_0w_8^6, h_0w_8^7 } + uint16 constant pH0w8_0 = 224; + uint16 constant pH0w8_1 = 256; + uint16 constant pH0w8_2 = 288; + uint16 constant pH0w8_3 = 320; + uint16 constant pH0w8_4 = 352; + uint16 constant pH0w8_5 = 384; + uint16 constant pH0w8_6 = 416; + uint16 constant pH0w8_7 = 448; + + // S_1 = roots_4(xi) = { h_1, h_1w_4, h_1w_4^2, h_1w_4^3 } + uint16 constant pH1w4_0 = 480; + uint16 constant pH1w4_1 = 512; + uint16 constant pH1w4_2 = 544; + uint16 constant pH1w4_3 = 576; + + // S_2 = roots_3(xi) U roots_3(xi omega) + // roots_3(xi) = { h_2, h_2w_3, h_2w_3^2 } + uint16 constant pH2w3_0 = 608; + uint16 constant pH2w3_1 = 640; + uint16 constant pH2w3_2 = 672; + // roots_3(xi omega) = { h_3, h_3w_3, h_3w_3^2 } + uint16 constant pH3w3_0 = 704; + uint16 constant pH3w3_1 = 736; + uint16 constant pH3w3_2 = 768; + + uint16 constant pPi = 800; // PI(xi) + uint16 constant pR0 = 832; // r0(y) + uint16 constant pR1 = 864; // r1(y) + uint16 constant pR2 = 896; // r2(y) + + uint16 constant pF = 928; // [F]_1, 64 bytes + uint16 constant pE = 992; // [E]_1, 64 bytes + uint16 constant pJ = 1056; // [J]_1, 64 bytes + + uint16 constant pZh = 1184; // Z_H(xi) + // From this point we write all the variables that must be computed using the Montgomery batch inversion + uint16 constant pZhInv = 1216; // 1/Z_H(xi) + uint16 constant pDenH1 = 1248; // 1/( (y-h_1w_4) (y-h_1w_4^2) (y-h_1w_4^3) (y-h_1w_4^4) ) + uint16 constant pDenH2 = 1280; // 1/( (y-h_2w_3) (y-h_2w_3^2) (y-h_2w_3^3) (y-h_3w_3) (y-h_3w_3^2) (y-h_3w_3^3) ) + uint16 constant pLiS0Inv = 1312; // Reserve 8 * 32 bytes to compute r_0(X) + uint16 constant pLiS1Inv = 1568; // Reserve 4 * 32 bytes to compute r_1(X) + uint16 constant pLiS2Inv = 1696; // Reserve 6 * 32 bytes to compute r_2(X) + // Lagrange evaluations + + uint16 constant pEval_l1 = 1888; + + + uint16 constant lastMem = 1920; + + + function verifyProof(bytes32[24] calldata proof, uint256[1] calldata pubSignals) public view returns (bool) { + assembly { + // Computes the inverse of an array of values + // See https://vitalik.ca/general/2018/07/21/starks_part_3.html in section where explain fields operations + // To save the inverse to be computed on chain the prover sends the inverse as an evaluation in commits.eval_inv + function inverseArray(pMem) { + + let pAux := mload(0x40) // Point to the next free position + let acc := mload(add(pMem,pZhInv)) // Read the first element + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pDenH1)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pDenH2)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS0Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 128))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 160))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 192))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 224))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS1Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS2Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 128))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 160))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pEval_l1)), q) + mstore(pAux, acc) + + + let inv := calldataload(pEval_inv) + + // Before using the inverse sent by the prover the verifier checks inv(batch) * batch === 1 + if iszero(eq(1, mulmod(acc, inv, q))) { + mstore(0, 0) + return(0,0x20) + } + + acc := inv + + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pEval_l1)), q) + mstore(add(pMem, pEval_l1), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 160))), q) + mstore(add(pMem, add(pLiS2Inv, 160)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 128))), q) + mstore(add(pMem, add(pLiS2Inv, 128)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 96))), q) + mstore(add(pMem, add(pLiS2Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 64))), q) + mstore(add(pMem, add(pLiS2Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 32))), q) + mstore(add(pMem, add(pLiS2Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS2Inv)), q) + mstore(add(pMem, pLiS2Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 96))), q) + mstore(add(pMem, add(pLiS1Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 64))), q) + mstore(add(pMem, add(pLiS1Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 32))), q) + mstore(add(pMem, add(pLiS1Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS1Inv)), q) + mstore(add(pMem, pLiS1Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 224))), q) + mstore(add(pMem, add(pLiS0Inv, 224)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 192))), q) + mstore(add(pMem, add(pLiS0Inv, 192)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 160))), q) + mstore(add(pMem, add(pLiS0Inv, 160)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 128))), q) + mstore(add(pMem, add(pLiS0Inv, 128)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 96))), q) + mstore(add(pMem, add(pLiS0Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 64))), q) + mstore(add(pMem, add(pLiS0Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 32))), q) + mstore(add(pMem, add(pLiS0Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS0Inv)), q) + mstore(add(pMem, pLiS0Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pDenH2)), q) + mstore(add(pMem, pDenH2), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pDenH1)), q) + mstore(add(pMem, pDenH1), inv) + + mstore(add(pMem, pZhInv), acc) + } + + function checkField(v) { + if iszero(lt(v, q)) { + mstore(0, 0) + return(0, 0x20) + } + } + + function checkPointBelongsToBN128Curve(p) { + let x := calldataload(p) + let y := calldataload(add(p, 32)) + + // Check that the point is on the curve + // y^2 = x^3 + 3 + let x3_3 := addmod(mulmod(x, mulmod(x, x, qf), qf), 3, qf) + let y2 := mulmod(y, y, qf) + + if iszero(eq(x3_3, y2)) { + mstore(0, 0) + return(0, 0x20) + } + } + + // Validate all the evaluations sent by the prover ∈ F + function checkInput() { + // Check proof commitments fullfill bn128 curve equation Y^2 = X^3 + 3 + checkPointBelongsToBN128Curve(pC1) + checkPointBelongsToBN128Curve(pC2) + checkPointBelongsToBN128Curve(pW1) + checkPointBelongsToBN128Curve(pW2) + + checkField(calldataload(pEval_ql)) + checkField(calldataload(pEval_qr)) + checkField(calldataload(pEval_qm)) + checkField(calldataload(pEval_qo)) + checkField(calldataload(pEval_qc)) + checkField(calldataload(pEval_s1)) + checkField(calldataload(pEval_s2)) + checkField(calldataload(pEval_s3)) + checkField(calldataload(pEval_a)) + checkField(calldataload(pEval_b)) + checkField(calldataload(pEval_c)) + checkField(calldataload(pEval_z)) + checkField(calldataload(pEval_zw)) + checkField(calldataload(pEval_t1w)) + checkField(calldataload(pEval_t2w)) + checkField(calldataload(pEval_inv)) + + // Points are checked in the point operations precompiled smart contracts + } + + function computeChallenges(pMem, pPublic) { + // Compute challenge.beta & challenge.gamma + mstore(add(pMem, 1920 ), C0x) + mstore(add(pMem, 1952 ), C0y) + + mstore(add(pMem, 1984), calldataload(pPublic)) + + + + mstore(add(pMem, 2016 ), calldataload(pC1)) + mstore(add(pMem, 2048 ), calldataload(add(pC1, 32))) + + mstore(add(pMem, pBeta), mod(keccak256(add(pMem, lastMem), 160), q)) + mstore(add(pMem, pGamma), mod(keccak256(add(pMem, pBeta), 32), q)) + + // Get xiSeed & xiSeed2 + mstore(add(pMem, lastMem), mload(add(pMem, pGamma))) + mstore(add(pMem, 1952), calldataload(pC2)) + mstore(add(pMem, 1984), calldataload(add(pC2, 32))) + let xiSeed := mod(keccak256(add(pMem, lastMem), 96), q) + + mstore(add(pMem, pXiSeed), xiSeed) + mstore(add(pMem, pXiSeed2), mulmod(xiSeed, xiSeed, q)) + + // Compute roots.S0.h0w8 + mstore(add(pMem, pH0w8_0), mulmod(mload(add(pMem, pXiSeed2)), mload(add(pMem, pXiSeed)), q)) + mstore(add(pMem, pH0w8_1), mulmod(mload(add(pMem, pH0w8_0)), w8_1, q)) + mstore(add(pMem, pH0w8_2), mulmod(mload(add(pMem, pH0w8_0)), w8_2, q)) + mstore(add(pMem, pH0w8_3), mulmod(mload(add(pMem, pH0w8_0)), w8_3, q)) + mstore(add(pMem, pH0w8_4), mulmod(mload(add(pMem, pH0w8_0)), w8_4, q)) + mstore(add(pMem, pH0w8_5), mulmod(mload(add(pMem, pH0w8_0)), w8_5, q)) + mstore(add(pMem, pH0w8_6), mulmod(mload(add(pMem, pH0w8_0)), w8_6, q)) + mstore(add(pMem, pH0w8_7), mulmod(mload(add(pMem, pH0w8_0)), w8_7, q)) + + // Compute roots.S1.h1w4 + mstore(add(pMem, pH1w4_0), mulmod(mload(add(pMem, pH0w8_0)), mload(add(pMem, pH0w8_0)), q)) + mstore(add(pMem, pH1w4_1), mulmod(mload(add(pMem, pH1w4_0)), w4, q)) + mstore(add(pMem, pH1w4_2), mulmod(mload(add(pMem, pH1w4_0)), w4_2, q)) + mstore(add(pMem, pH1w4_3), mulmod(mload(add(pMem, pH1w4_0)), w4_3, q)) + + // Compute roots.S2.h2w3 + mstore(add(pMem, pH2w3_0), mulmod(mload(add(pMem, pH1w4_0)), mload(add(pMem, pXiSeed2)), q)) + mstore(add(pMem, pH2w3_1), mulmod(mload(add(pMem, pH2w3_0)), w3, q)) + mstore(add(pMem, pH2w3_2), mulmod(mload(add(pMem, pH2w3_0)), w3_2, q)) + + // Compute roots.S2.h2w3 + mstore(add(pMem, pH3w3_0), mulmod(mload(add(pMem, pH2w3_0)), wr, q)) + mstore(add(pMem, pH3w3_1), mulmod(mload(add(pMem, pH3w3_0)), w3, q)) + mstore(add(pMem, pH3w3_2), mulmod(mload(add(pMem, pH3w3_0)), w3_2, q)) + + let xin := mulmod(mulmod(mload(add(pMem, pH2w3_0)), mload(add(pMem, pH2w3_0)), q), mload(add(pMem, pH2w3_0)), q) + mstore(add(pMem, pXi), xin) + + // Compute xi^n + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + + xin:= mod(add(sub(xin, 1), q), q) + mstore(add(pMem, pZh), xin) + mstore(add(pMem, pZhInv), xin) // We will invert later together with lagrange pols + + // Compute challenge.alpha + mstore(add(pMem, lastMem), xiSeed) + + calldatacopy(add(pMem, 1952), pEval_ql, 480) + mstore(add(pMem, pAlpha), mod(keccak256(add(pMem, lastMem), 512), q)) + + // Compute challenge.y + mstore(add(pMem, lastMem), mload(add(pMem, pAlpha))) + mstore(add(pMem, 1952 ), calldataload(pW1)) + mstore(add(pMem, 1984 ), calldataload(add(pW1, 32))) + mstore(add(pMem, pY), mod(keccak256(add(pMem, lastMem), 96), q)) + } + + function computeLiS0(pMem) { + let root0 := mload(add(pMem, pH0w8_0)) + let y := mload(add(pMem, pY)) + let den1 := 1 + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + + den1 := mulmod(8, den1, q) + + let den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 0), 8), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 1), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 2), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 3), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(3, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 4), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(4, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 128)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 5), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(5, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 160)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 6), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(6, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 192)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 7), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(7, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 224)), mulmod(den1, mulmod(den2, den3, q), q)) + + } + + function computeLiS1(pMem) { + let root0 := mload(add(pMem, pH1w4_0)) + let y := mload(add(pMem, pY)) + let den1 := 1 + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + + den1 := mulmod(4, den1, q) + + let den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 0), 4), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 1), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 2), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 3), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(3, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + } + + function computeLiS2(pMem) { + + let y := mload(add(pMem, pY)) + + let den1 := mulmod(mulmod(3,mload(add(pMem, pH2w3_0)),q), addmod(mload(add(pMem, pXi)) ,mod(sub(q, mulmod(mload(add(pMem, pXi)), w1 ,q)), q), q), q) + + let den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 0), 3), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 1), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 2), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den1 := mulmod(mulmod(3,mload(add(pMem, pH3w3_0)),q), addmod(mulmod(mload(add(pMem, pXi)), w1 ,q),mod(sub(q, mload(add(pMem, pXi))), q), q), q) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 0), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 1), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 128)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 2), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 160)), mulmod(den1, mulmod(den2, den3, q), q)) + } + + // Prepare all the denominators that must be inverted, placed them in consecutive memory addresses + function computeInversions(pMem) { + // 1/ZH(xi) used in steps 8 and 9 of the verifier to multiply by 1/Z_H(xi) + // Value computed during computeChallenges function and stores in pMem+pZhInv + + // 1/((y - h1) (y - h1w4) (y - h1w4_2) (y - h1w4_3)) + // used in steps 10 and 11 of the verifier + let y := mload(add(pMem, pY)) + let w := addmod(y, mod(sub(q, mload(add(pMem, pH1w4_0))), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_2))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_3))), q), q), q) + mstore(add(pMem, pDenH1), w) + + // 1/((y - h2) (y - h2w3) (y - h2w3_2) (y - h3) (y - h3w3) (y - h3w3_2)) + w := addmod(y, mod(sub(q, mload(add(pMem, pH2w3_0))), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH2w3_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH2w3_2))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_0))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_2))), q), q), q) + mstore(add(pMem, pDenH2), w) + + // Denominator needed in the verifier when computing L_i^{S0}(X) + computeLiS0(pMem) + + // Denominator needed in the verifier when computing L_i^{S1}(X) + computeLiS1(pMem) + + // Denominator needed in the verifier when computing L_i^{S2}(X) + computeLiS2(pMem) + + // L_i where i from 1 to num public inputs, needed in step 6 and 7 of the verifier to compute L_1(xi) and PI(xi) + w := 1 + let xi := mload(add(pMem, pXi)) + + mstore(add(pMem, pEval_l1), mulmod(n, mod(add(sub(xi, w), q), q), q)) + + + // Execute Montgomery batched inversions of the previous prepared values + inverseArray(pMem) } + + // Compute Lagrange polynomial evaluation L_i(xi) + function computeLagrange(pMem) { + let zh := mload(add(pMem, pZh)) + let w := 1 + + mstore(add(pMem, pEval_l1 ), mulmod(mload(add(pMem, pEval_l1 )), zh, q)) + + } + + // Compute public input polynomial evaluation PI(xi) + function computePi(pMem, pPub) { + let pi := 0 + pi := mod(add(sub(pi, mulmod(mload(add(pMem, pEval_l1)), calldataload(pPub), q)), q), q) + + mstore(add(pMem, pPi), pi) + } + + // Compute r0(y) by interpolating the polynomial r0(X) using 8 points (x,y) + // where x = {h9, h0w8, h0w8^2, h0w8^3, h0w8^4, h0w8^5, h0w8^6, h0w8^7} + // and y = {C0(h0), C0(h0w8), C0(h0w8^2), C0(h0w8^3), C0(h0w8^4), C0(h0w8^5), C0(h0w8^6), C0(h0w8^7)} + // and computing C0(xi) + function computeR0(pMem) { + let num := 1 + let y := mload(add(pMem, pY)) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + + num := addmod(num, mod(sub(q, mload(add(pMem, pXi))), q), q) + + let res + let h0w80 + let c0Value + let h0w8i + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_0)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 0))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_1)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 32))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_2)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 64))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_3)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 96))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_4)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 128))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_5)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 160))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_6)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 192))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_7)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 224))), q), q), q) + + + mstore(add(pMem, pR0), res) + } + + // Compute r1(y) by interpolating the polynomial r1(X) using 4 points (x,y) + // where x = {h1, h1w4, h1w4^2, h1w4^3} + // and y = {C1(h1), C1(h1w4), C1(h1w4^2), C1(h1w4^3)} + // and computing T0(xi) + function computeR1(pMem) { + let num := 1 + let y := mload(add(pMem, pY)) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + + num := addmod(num, mod(sub(q, mload(add(pMem, pXi))), q), q) + + let t0 + let evalA := calldataload(pEval_a) + let evalB := calldataload(pEval_b) + let evalC := calldataload(pEval_c) + + t0 := mulmod(calldataload(pEval_ql), evalA, q) + t0 := addmod(t0, mulmod(calldataload(pEval_qr), evalB, q) ,q) + t0 := addmod(t0, mulmod(calldataload(pEval_qm), mulmod(evalA, evalB, q), q) ,q) + t0 := addmod(t0, mulmod(calldataload(pEval_qo), evalC, q) ,q) + t0 := addmod(t0, calldataload(pEval_qc) ,q) + t0 := addmod(t0, mload(add(pMem, pPi)), q) + t0 := mulmod(t0, mload(add(pMem, pZhInv)), q) + + let res + let c1Value + let h1w4 + let square + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_0)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(0, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_1)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(1, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_2)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(2, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_3)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(3, 32)))), q), q), q) + + + mstore(add(pMem, pR1), res) + } + + // Compute r2(y) by interpolating the polynomial r2(X) using 6 points (x,y) + // where x = {[h2, h2w3, h2w3^2], [h3, h3w3, h3w3^2]} + // and y = {[C2(h2), C2(h2w3), C2(h2w3^2)], [C2(h3), C2(h3w3), C2(h3w3^2)]} + // and computing T1(xi) and T2(xi) + function computeR2(pMem) { + let y := mload(add(pMem, pY)) + let num := 1 + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + + let num2 := 1 + num2 := mulmod(y, num2, q) + num2 := mulmod(y, num2, q) + num2 := mulmod(y, num2, q) + num2 := mulmod(num2, addmod(mulmod(mload(add(pMem, pXi)), w1 ,q), mload(add(pMem, pXi)), q), q) + + num := addmod(num, mod(sub(q, num2), q), q) + + num2 := mulmod(mulmod(mload(add(pMem, pXi)), w1 ,q), mload(add(pMem, pXi)), q) + + num := addmod(num, num2, q) + + let t1 + let t2 + let betaXi := mulmod(mload(add(pMem, pBeta)), mload(add(pMem, pXi)), q) + let gamma := mload(add(pMem, pGamma)) + + t2 := addmod(calldataload( pEval_a), addmod(betaXi, gamma, q) ,q) + t2 := mulmod(t2, + addmod(calldataload( pEval_b), + addmod(mulmod(betaXi, k1, q), gamma, q) ,q), q) + t2 := mulmod(t2, + addmod(calldataload( pEval_c), + addmod(mulmod(betaXi, k2, q), gamma, q) ,q), q) + t2 := mulmod(t2, calldataload(pEval_z), q) + + //Let's use t1 as a temporal variable to save one local + t1 := addmod(calldataload(pEval_a), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s1), q), gamma, q) ,q) + t1 := mulmod(t1, + addmod(calldataload(pEval_b), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s2), q), gamma, q) ,q), q) + t1 := mulmod(t1, + addmod(calldataload(pEval_c), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s3), q), gamma, q) ,q), q) + t1 := mulmod(t1, calldataload(pEval_zw), q) + + t2:= addmod(t2, mod(sub(q, t1), q), q) + t2 := mulmod(t2, mload(add(pMem, pZhInv)), q) + + // Compute T1(xi) + t1 := sub(calldataload(pEval_z), 1) + t1 := mulmod(t1, mload(add(pMem, pEval_l1)) ,q) + t1 := mulmod(t1, mload(add(pMem, pZhInv)) ,q) + + // Let's use local variable gamma to save the result + gamma:=0 + + let hw + let c2Value + + hw := mload(add(pMem, pH2w3_0)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(0, 32)))), q), q), q) + + hw := mload(add(pMem, pH2w3_1)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(1, 32)))), q), q), q) + + hw := mload(add(pMem, pH2w3_2)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(2, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_0)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(3, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_1)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(4, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_2)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(5, 32)))), q), q), q) + + mstore(add(pMem, pR2), gamma) + } + + // G1 function to accumulate a G1 value to an address + function g1_acc(pR, pP) { + let mIn := mload(0x40) + mstore(mIn, mload(pR)) + mstore(add(mIn, 32), mload(add(pR, 32))) + mstore(add(mIn, 64), mload(pP)) + mstore(add(mIn, 96), mload(add(pP, 32))) + + let success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + // G1 function to multiply a G1 value to value in an address + function g1_mulAcc(pR, pP, s) { + let success + let mIn := mload(0x40) + mstore(mIn, calldataload(pP)) + mstore(add(mIn, 32), calldataload(add(pP, 32))) + mstore(add(mIn, 64), s) + + success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + + mstore(add(mIn, 64), mload(pR)) + mstore(add(mIn, 96), mload(add(pR, 32))) + + success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + // G1 function to multiply a G1 value(x,y) to value in an address + function g1_mulAccC(pR, x, y, s) { + let success + let mIn := mload(0x40) + mstore(mIn, x) + mstore(add(mIn, 32), y) + mstore(add(mIn, 64), s) + + success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + + mstore(add(mIn, 64), mload(pR)) + mstore(add(mIn, 96), mload(add(pR, 32))) + + success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + function computeFEJ(pMem) { + // Prepare shared numerator between F, E and J to reuse it + let y := mload(add(pMem, pY)) + let numerator := addmod(y, mod(sub(q, mload(add(pMem, pH0w8_0))), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_1))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_2))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_3))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_4))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_5))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_6))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_7))), q), q), q) + + // Prepare shared quotient between F and E to reuse it + let quotient1 := mulmod(mload(add(pMem, pAlpha)), mulmod(numerator, mload(add(pMem, pDenH1)), q), q) + let quotient2 := mulmod(mulmod(mload(add(pMem, pAlpha)), mload(add(pMem, pAlpha)), q), mulmod(numerator, mload(add(pMem, pDenH2)), q), q) + + // Compute full batched polynomial commitment [F]_1 + mstore(add(pMem, pF), C0x) + mstore(add(pMem, add(pF, 32)), C0y) + g1_mulAcc(add(pMem, pF), pC1, quotient1) + g1_mulAcc(add(pMem, pF), pC2, quotient2) + + // Compute group-encoded batch evaluation [E]_1 + g1_mulAccC(add(pMem, pE), G1x, G1y, addmod(mload(add(pMem, pR0)), addmod(mulmod(quotient1, mload(add(pMem, pR1)),q), mulmod(quotient2, mload(add(pMem, pR2)),q), q), q)) + + // Compute the full difference [J]_1 + g1_mulAcc(add(pMem, pJ), pW1, numerator) + } + + // Validate all evaluations with a pairing checking that e([F]_1 - [E]_1 - [J]_1 + y[W2]_1, [1]_2) == e([W']_1, [x]_2) + function checkPairing(pMem) -> isOk { + let mIn := mload(0x40) + + // First pairing value + // Compute -E + mstore(add(add(pMem, pE), 32), mod(sub(qf, mload(add(add(pMem, pE), 32))), qf)) + // Compute -J + mstore(add(add(pMem, pJ), 32), mod(sub(qf, mload(add(add(pMem, pJ), 32))), qf)) + // F = F - E - J + y·W2 + g1_acc(add(pMem, pF), add(pMem, pE)) + g1_acc(add(pMem, pF), add(pMem, pJ)) + g1_mulAcc(add(pMem, pF), pW2, mload(add(pMem, pY))) + + mstore(mIn, mload(add(pMem, pF))) + mstore(add(mIn, 32), mload(add(add(pMem, pF), 32))) + + // Second pairing value + mstore(add(mIn, 64), G2x2) + mstore(add(mIn, 96), G2x1) + mstore(add(mIn, 128), G2y2) + mstore(add(mIn, 160), G2y1) + + // Third pairing value + // Compute -W2 + mstore(add(mIn, 192), calldataload(pW2)) + let s := calldataload(add(pW2, 32)) + s := mod(sub(qf, s), qf) + mstore(add(mIn, 224), s) + + // Fourth pairing value + mstore(add(mIn, 256), X2x2) + mstore(add(mIn, 288), X2x1) + mstore(add(mIn, 320), X2y2) + mstore(add(mIn, 352), X2y1) + + let success := staticcall(sub(gas(), 2000), 8, mIn, 384, mIn, 0x20) + + isOk := and(success, mload(mIn)) + } + + let pMem := mload(0x40) + mstore(0x40, add(pMem, lastMem)) + + // Validate that all evaluations ∈ F + checkInput() + + // Compute the challenges: beta, gamma, xi, alpha and y ∈ F, h1w4/h2w3/h3w3 roots, xiN and zh(xi) + computeChallenges(pMem, pubSignals) + + // To divide prime fields the Extended Euclidean Algorithm for computing modular inverses is needed. + // The Montgomery batch inversion algorithm allow us to compute n inverses reducing to a single one inversion. + // More info: https://vitalik.ca/general/2018/07/21/starks_part_3.html + // To avoid this single inverse computation on-chain, it has been computed in proving time and send it to the verifier. + // Therefore, the verifier: + // 1) Prepare all the denominators to inverse + // 2) Check the inverse sent by the prover it is what it should be + // 3) Compute the others inverses using the Montgomery Batched Algorithm using the inverse sent to avoid the inversion operation it does. + computeInversions(pMem) + + // Compute Lagrange polynomial evaluations Li(xi) + computeLagrange(pMem) + + // Compute public input polynomial evaluation PI(xi) = \sum_i^l -public_input_i·L_i(xi) + computePi(pMem, pubSignals) + + // Computes r1(y) and r2(y) + computeR0(pMem) + computeR1(pMem) + computeR2(pMem) + + // Compute full batched polynomial commitment [F]_1, group-encoded batch evaluation [E]_1 and the full difference [J]_1 + computeFEJ(pMem) + + // Validate all evaluations + let isValid := checkPairing(pMem) + + mstore(0, isValid) + return(0, 0x20) + } + } +} \ No newline at end of file diff --git a/contracts/verifiers/FflonkVerifier_11.sol b/contracts/verifiers/FflonkVerifier_11.sol new file mode 100644 index 000000000..ab8511c1a --- /dev/null +++ b/contracts/verifiers/FflonkVerifier_11.sol @@ -0,0 +1,1244 @@ +// SPDX-License-Identifier: GPL-3.0 +/* + Copyright 2021 0KIMS association. + + This file is generated with [snarkJS](https://github.com/iden3/snarkjs). + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . +*/ + +pragma solidity >=0.7.0 <0.9.0; + +contract FflonkVerifier_11 { + uint32 constant n = 16777216; // Domain size + + // Verification Key data + uint256 constant k1 = 2; // Plonk k1 multiplicative factor to force distinct cosets of H + uint256 constant k2 = 3; // Plonk k2 multiplicative factor to force distinct cosets of H + + // OMEGAS + // Omega, Omega^{1/3} + uint256 constant w1 = 5709868443893258075976348696661355716898495876243883251619397131511003808859; + uint256 constant wr = 18200100796661656210024324131237448517259556535315737226009542456080026430510; + // Omega_3, Omega_3^2 + uint256 constant w3 = 21888242871839275217838484774961031246154997185409878258781734729429964517155; + uint256 constant w3_2 = 4407920970296243842393367215006156084916469457145843978461; + // Omega_4, Omega_4^2, Omega_4^3 + uint256 constant w4 = 21888242871839275217838484774961031246007050428528088939761107053157389710902; + uint256 constant w4_2 = 21888242871839275222246405745257275088548364400416034343698204186575808495616; + uint256 constant w4_3 = 4407920970296243842541313971887945403937097133418418784715; + // Omega_8, Omega_8^2, Omega_8^3, Omega_8^4, Omega_8^5, Omega_8^6, Omega_8^7 + uint256 constant w8_1 = 19540430494807482326159819597004422086093766032135589407132600596362845576832; + uint256 constant w8_2 = 21888242871839275217838484774961031246007050428528088939761107053157389710902; + uint256 constant w8_3 = 13274704216607947843011480449124596415239537050559949017414504948711435969894; + uint256 constant w8_4 = 21888242871839275222246405745257275088548364400416034343698204186575808495616; + uint256 constant w8_5 = 2347812377031792896086586148252853002454598368280444936565603590212962918785; + uint256 constant w8_6 = 4407920970296243842541313971887945403937097133418418784715; + uint256 constant w8_7 = 8613538655231327379234925296132678673308827349856085326283699237864372525723; + + // Verifier preprocessed input C_0(x)·[1]_1 + uint256 constant C0x = 11553294103217785023516748419184161960688215767988858039368256322332861589771; + uint256 constant C0y = 10092895974211559972859178879634538990964607545177723538837209775275130760109; + + // Verifier preprocessed input x·[1]_2 + uint256 constant X2x1 = 21831381940315734285607113342023901060522397560371972897001948545212302161822; + uint256 constant X2x2 = 17231025384763736816414546592865244497437017442647097510447326538965263639101; + uint256 constant X2y1 = 2388026358213174446665280700919698872609886601280537296205114254867301080648; + uint256 constant X2y2 = 11507326595632554467052522095592665270651932854513688777769618397986436103170; + + // Scalar field size + uint256 constant q = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + // Base field size + uint256 constant qf = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + // [1]_1 + uint256 constant G1x = 1; + uint256 constant G1y = 2; + // [1]_2 + uint256 constant G2x1 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; + uint256 constant G2x2 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; + uint256 constant G2y1 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; + uint256 constant G2y2 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; + + // Proof calldata + // Byte offset of every parameter of the calldata + // Polynomial commitments + uint16 constant pC1 = 4 + 0; // [C1]_1 + uint16 constant pC2 = 4 + 32*2; // [C2]_1 + uint16 constant pW1 = 4 + 32*4; // [W]_1 + uint16 constant pW2 = 4 + 32*6; // [W']_1 + // Opening evaluations + uint16 constant pEval_ql = 4 + 32*8; // q_L(xi) + uint16 constant pEval_qr = 4 + 32*9; // q_R(xi) + uint16 constant pEval_qm = 4 + 32*10; // q_M(xi) + uint16 constant pEval_qo = 4 + 32*11; // q_O(xi) + uint16 constant pEval_qc = 4 + 32*12; // q_C(xi) + uint16 constant pEval_s1 = 4 + 32*13; // S_{sigma_1}(xi) + uint16 constant pEval_s2 = 4 + 32*14; // S_{sigma_2}(xi) + uint16 constant pEval_s3 = 4 + 32*15; // S_{sigma_3}(xi) + uint16 constant pEval_a = 4 + 32*16; // a(xi) + uint16 constant pEval_b = 4 + 32*17; // b(xi) + uint16 constant pEval_c = 4 + 32*18; // c(xi) + uint16 constant pEval_z = 4 + 32*19; // z(xi) + uint16 constant pEval_zw = 4 + 32*20; // z_omega(xi) + uint16 constant pEval_t1w = 4 + 32*21; // T_1(xi omega) + uint16 constant pEval_t2w = 4 + 32*22; // T_2(xi omega) + uint16 constant pEval_inv = 4 + 32*23; // inv(batch) sent by the prover to avoid any inverse calculation to save gas, + // we check the correctness of the inv(batch) by computing batch + // and checking inv(batch) * batch == 1 + + // Memory data + // Challenges + uint16 constant pAlpha = 0; // alpha challenge + uint16 constant pBeta = 32; // beta challenge + uint16 constant pGamma = 64; // gamma challenge + uint16 constant pY = 96; // y challenge + uint16 constant pXiSeed = 128; // xi seed, from this value we compute xi = xiSeed^24 + uint16 constant pXiSeed2 = 160; // (xi seed)^2 + uint16 constant pXi = 192; // xi challenge + + // Roots + // S_0 = roots_8(xi) = { h_0, h_0w_8, h_0w_8^2, h_0w_8^3, h_0w_8^4, h_0w_8^5, h_0w_8^6, h_0w_8^7 } + uint16 constant pH0w8_0 = 224; + uint16 constant pH0w8_1 = 256; + uint16 constant pH0w8_2 = 288; + uint16 constant pH0w8_3 = 320; + uint16 constant pH0w8_4 = 352; + uint16 constant pH0w8_5 = 384; + uint16 constant pH0w8_6 = 416; + uint16 constant pH0w8_7 = 448; + + // S_1 = roots_4(xi) = { h_1, h_1w_4, h_1w_4^2, h_1w_4^3 } + uint16 constant pH1w4_0 = 480; + uint16 constant pH1w4_1 = 512; + uint16 constant pH1w4_2 = 544; + uint16 constant pH1w4_3 = 576; + + // S_2 = roots_3(xi) U roots_3(xi omega) + // roots_3(xi) = { h_2, h_2w_3, h_2w_3^2 } + uint16 constant pH2w3_0 = 608; + uint16 constant pH2w3_1 = 640; + uint16 constant pH2w3_2 = 672; + // roots_3(xi omega) = { h_3, h_3w_3, h_3w_3^2 } + uint16 constant pH3w3_0 = 704; + uint16 constant pH3w3_1 = 736; + uint16 constant pH3w3_2 = 768; + + uint16 constant pPi = 800; // PI(xi) + uint16 constant pR0 = 832; // r0(y) + uint16 constant pR1 = 864; // r1(y) + uint16 constant pR2 = 896; // r2(y) + + uint16 constant pF = 928; // [F]_1, 64 bytes + uint16 constant pE = 992; // [E]_1, 64 bytes + uint16 constant pJ = 1056; // [J]_1, 64 bytes + + uint16 constant pZh = 1184; // Z_H(xi) + // From this point we write all the variables that must be computed using the Montgomery batch inversion + uint16 constant pZhInv = 1216; // 1/Z_H(xi) + uint16 constant pDenH1 = 1248; // 1/( (y-h_1w_4) (y-h_1w_4^2) (y-h_1w_4^3) (y-h_1w_4^4) ) + uint16 constant pDenH2 = 1280; // 1/( (y-h_2w_3) (y-h_2w_3^2) (y-h_2w_3^3) (y-h_3w_3) (y-h_3w_3^2) (y-h_3w_3^3) ) + uint16 constant pLiS0Inv = 1312; // Reserve 8 * 32 bytes to compute r_0(X) + uint16 constant pLiS1Inv = 1568; // Reserve 4 * 32 bytes to compute r_1(X) + uint16 constant pLiS2Inv = 1696; // Reserve 6 * 32 bytes to compute r_2(X) + // Lagrange evaluations + + uint16 constant pEval_l1 = 1888; + + + uint16 constant lastMem = 1920; + + + function verifyProof(bytes32[24] calldata proof, uint256[1] calldata pubSignals) public view returns (bool) { + assembly { + // Computes the inverse of an array of values + // See https://vitalik.ca/general/2018/07/21/starks_part_3.html in section where explain fields operations + // To save the inverse to be computed on chain the prover sends the inverse as an evaluation in commits.eval_inv + function inverseArray(pMem) { + + let pAux := mload(0x40) // Point to the next free position + let acc := mload(add(pMem,pZhInv)) // Read the first element + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pDenH1)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pDenH2)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS0Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 128))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 160))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 192))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 224))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS1Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pLiS2Inv)), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 32))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 64))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 96))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 128))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 160))), q) + mstore(pAux, acc) + + pAux := add(pAux, 32) + acc := mulmod(acc, mload(add(pMem, pEval_l1)), q) + mstore(pAux, acc) + + + let inv := calldataload(pEval_inv) + + // Before using the inverse sent by the prover the verifier checks inv(batch) * batch === 1 + if iszero(eq(1, mulmod(acc, inv, q))) { + mstore(0, 0) + return(0,0x20) + } + + acc := inv + + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pEval_l1)), q) + mstore(add(pMem, pEval_l1), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 160))), q) + mstore(add(pMem, add(pLiS2Inv, 160)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 128))), q) + mstore(add(pMem, add(pLiS2Inv, 128)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 96))), q) + mstore(add(pMem, add(pLiS2Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 64))), q) + mstore(add(pMem, add(pLiS2Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS2Inv, 32))), q) + mstore(add(pMem, add(pLiS2Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS2Inv)), q) + mstore(add(pMem, pLiS2Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 96))), q) + mstore(add(pMem, add(pLiS1Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 64))), q) + mstore(add(pMem, add(pLiS1Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS1Inv, 32))), q) + mstore(add(pMem, add(pLiS1Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS1Inv)), q) + mstore(add(pMem, pLiS1Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 224))), q) + mstore(add(pMem, add(pLiS0Inv, 224)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 192))), q) + mstore(add(pMem, add(pLiS0Inv, 192)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 160))), q) + mstore(add(pMem, add(pLiS0Inv, 160)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 128))), q) + mstore(add(pMem, add(pLiS0Inv, 128)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 96))), q) + mstore(add(pMem, add(pLiS0Inv, 96)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 64))), q) + mstore(add(pMem, add(pLiS0Inv, 64)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, add(pLiS0Inv, 32))), q) + mstore(add(pMem, add(pLiS0Inv, 32)), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pLiS0Inv)), q) + mstore(add(pMem, pLiS0Inv), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pDenH2)), q) + mstore(add(pMem, pDenH2), inv) + pAux := sub(pAux, 32) + inv := mulmod(acc, mload(pAux), q) + acc := mulmod(acc, mload(add(pMem, pDenH1)), q) + mstore(add(pMem, pDenH1), inv) + + mstore(add(pMem, pZhInv), acc) + } + + function checkField(v) { + if iszero(lt(v, q)) { + mstore(0, 0) + return(0, 0x20) + } + } + + function checkPointBelongsToBN128Curve(p) { + let x := calldataload(p) + let y := calldataload(add(p, 32)) + + // Check that the point is on the curve + // y^2 = x^3 + 3 + let x3_3 := addmod(mulmod(x, mulmod(x, x, qf), qf), 3, qf) + let y2 := mulmod(y, y, qf) + + if iszero(eq(x3_3, y2)) { + mstore(0, 0) + return(0, 0x20) + } + } + + // Validate all the evaluations sent by the prover ∈ F + function checkInput() { + // Check proof commitments fullfill bn128 curve equation Y^2 = X^3 + 3 + checkPointBelongsToBN128Curve(pC1) + checkPointBelongsToBN128Curve(pC2) + checkPointBelongsToBN128Curve(pW1) + checkPointBelongsToBN128Curve(pW2) + + checkField(calldataload(pEval_ql)) + checkField(calldataload(pEval_qr)) + checkField(calldataload(pEval_qm)) + checkField(calldataload(pEval_qo)) + checkField(calldataload(pEval_qc)) + checkField(calldataload(pEval_s1)) + checkField(calldataload(pEval_s2)) + checkField(calldataload(pEval_s3)) + checkField(calldataload(pEval_a)) + checkField(calldataload(pEval_b)) + checkField(calldataload(pEval_c)) + checkField(calldataload(pEval_z)) + checkField(calldataload(pEval_zw)) + checkField(calldataload(pEval_t1w)) + checkField(calldataload(pEval_t2w)) + checkField(calldataload(pEval_inv)) + + // Points are checked in the point operations precompiled smart contracts + } + + function computeChallenges(pMem, pPublic) { + // Compute challenge.beta & challenge.gamma + mstore(add(pMem, 1920 ), C0x) + mstore(add(pMem, 1952 ), C0y) + + mstore(add(pMem, 1984), calldataload(pPublic)) + + + + mstore(add(pMem, 2016 ), calldataload(pC1)) + mstore(add(pMem, 2048 ), calldataload(add(pC1, 32))) + + mstore(add(pMem, pBeta), mod(keccak256(add(pMem, lastMem), 160), q)) + mstore(add(pMem, pGamma), mod(keccak256(add(pMem, pBeta), 32), q)) + + // Get xiSeed & xiSeed2 + mstore(add(pMem, lastMem), mload(add(pMem, pGamma))) + mstore(add(pMem, 1952), calldataload(pC2)) + mstore(add(pMem, 1984), calldataload(add(pC2, 32))) + let xiSeed := mod(keccak256(add(pMem, lastMem), 96), q) + + mstore(add(pMem, pXiSeed), xiSeed) + mstore(add(pMem, pXiSeed2), mulmod(xiSeed, xiSeed, q)) + + // Compute roots.S0.h0w8 + mstore(add(pMem, pH0w8_0), mulmod(mload(add(pMem, pXiSeed2)), mload(add(pMem, pXiSeed)), q)) + mstore(add(pMem, pH0w8_1), mulmod(mload(add(pMem, pH0w8_0)), w8_1, q)) + mstore(add(pMem, pH0w8_2), mulmod(mload(add(pMem, pH0w8_0)), w8_2, q)) + mstore(add(pMem, pH0w8_3), mulmod(mload(add(pMem, pH0w8_0)), w8_3, q)) + mstore(add(pMem, pH0w8_4), mulmod(mload(add(pMem, pH0w8_0)), w8_4, q)) + mstore(add(pMem, pH0w8_5), mulmod(mload(add(pMem, pH0w8_0)), w8_5, q)) + mstore(add(pMem, pH0w8_6), mulmod(mload(add(pMem, pH0w8_0)), w8_6, q)) + mstore(add(pMem, pH0w8_7), mulmod(mload(add(pMem, pH0w8_0)), w8_7, q)) + + // Compute roots.S1.h1w4 + mstore(add(pMem, pH1w4_0), mulmod(mload(add(pMem, pH0w8_0)), mload(add(pMem, pH0w8_0)), q)) + mstore(add(pMem, pH1w4_1), mulmod(mload(add(pMem, pH1w4_0)), w4, q)) + mstore(add(pMem, pH1w4_2), mulmod(mload(add(pMem, pH1w4_0)), w4_2, q)) + mstore(add(pMem, pH1w4_3), mulmod(mload(add(pMem, pH1w4_0)), w4_3, q)) + + // Compute roots.S2.h2w3 + mstore(add(pMem, pH2w3_0), mulmod(mload(add(pMem, pH1w4_0)), mload(add(pMem, pXiSeed2)), q)) + mstore(add(pMem, pH2w3_1), mulmod(mload(add(pMem, pH2w3_0)), w3, q)) + mstore(add(pMem, pH2w3_2), mulmod(mload(add(pMem, pH2w3_0)), w3_2, q)) + + // Compute roots.S2.h2w3 + mstore(add(pMem, pH3w3_0), mulmod(mload(add(pMem, pH2w3_0)), wr, q)) + mstore(add(pMem, pH3w3_1), mulmod(mload(add(pMem, pH3w3_0)), w3, q)) + mstore(add(pMem, pH3w3_2), mulmod(mload(add(pMem, pH3w3_0)), w3_2, q)) + + let xin := mulmod(mulmod(mload(add(pMem, pH2w3_0)), mload(add(pMem, pH2w3_0)), q), mload(add(pMem, pH2w3_0)), q) + mstore(add(pMem, pXi), xin) + + // Compute xi^n + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + xin:= mulmod(xin, xin, q) + + + xin:= mod(add(sub(xin, 1), q), q) + mstore(add(pMem, pZh), xin) + mstore(add(pMem, pZhInv), xin) // We will invert later together with lagrange pols + + // Compute challenge.alpha + mstore(add(pMem, lastMem), xiSeed) + + calldatacopy(add(pMem, 1952), pEval_ql, 480) + mstore(add(pMem, pAlpha), mod(keccak256(add(pMem, lastMem), 512), q)) + + // Compute challenge.y + mstore(add(pMem, lastMem), mload(add(pMem, pAlpha))) + mstore(add(pMem, 1952 ), calldataload(pW1)) + mstore(add(pMem, 1984 ), calldataload(add(pW1, 32))) + mstore(add(pMem, pY), mod(keccak256(add(pMem, lastMem), 96), q)) + } + + function computeLiS0(pMem) { + let root0 := mload(add(pMem, pH0w8_0)) + let y := mload(add(pMem, pY)) + let den1 := 1 + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + + den1 := mulmod(8, den1, q) + + let den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 0), 8), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 1), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 2), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 3), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(3, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 4), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(4, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 128)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 5), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(5, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 160)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 6), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(6, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 192)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH0w8_0, mul(mod(mul(7, 7), 8), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH0w8_0, mul(7, 32))))), q), q) + + mstore(add(pMem, add(pLiS0Inv, 224)), mulmod(den1, mulmod(den2, den3, q), q)) + + } + + function computeLiS1(pMem) { + let root0 := mload(add(pMem, pH1w4_0)) + let y := mload(add(pMem, pY)) + let den1 := 1 + den1 := mulmod(den1, root0, q) + den1 := mulmod(den1, root0, q) + + den1 := mulmod(4, den1, q) + + let den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 0), 4), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 1), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 2), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH1w4_0, mul(mod(mul(3, 3), 4), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH1w4_0, mul(3, 32))))), q), q) + + mstore(add(pMem, add(pLiS1Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + } + + function computeLiS2(pMem) { + + let y := mload(add(pMem, pY)) + + let den1 := mulmod(mulmod(3,mload(add(pMem, pH2w3_0)),q), addmod(mload(add(pMem, pXi)) ,mod(sub(q, mulmod(mload(add(pMem, pXi)), w1 ,q)), q), q), q) + + let den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 0), 3), 32)))) + let den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 0)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 1), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 32)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH2w3_0, mul(mod(mul(2, 2), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH2w3_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 64)), mulmod(den1, mulmod(den2, den3, q), q)) + + den1 := mulmod(mulmod(3,mload(add(pMem, pH3w3_0)),q), addmod(mulmod(mload(add(pMem, pXi)), w1 ,q),mod(sub(q, mload(add(pMem, pXi))), q), q), q) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 0), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(0, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 96)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 1), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(1, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 128)), mulmod(den1, mulmod(den2, den3, q), q)) + + den2 := mload(add(pMem, add(pH3w3_0, mul(mod(mul(2, 2), 3), 32)))) + den3 := addmod(y, mod(sub(q, mload(add(pMem, add(pH3w3_0, mul(2, 32))))), q), q) + + mstore(add(pMem, add(pLiS2Inv, 160)), mulmod(den1, mulmod(den2, den3, q), q)) + } + + // Prepare all the denominators that must be inverted, placed them in consecutive memory addresses + function computeInversions(pMem) { + // 1/ZH(xi) used in steps 8 and 9 of the verifier to multiply by 1/Z_H(xi) + // Value computed during computeChallenges function and stores in pMem+pZhInv + + // 1/((y - h1) (y - h1w4) (y - h1w4_2) (y - h1w4_3)) + // used in steps 10 and 11 of the verifier + let y := mload(add(pMem, pY)) + let w := addmod(y, mod(sub(q, mload(add(pMem, pH1w4_0))), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_2))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH1w4_3))), q), q), q) + mstore(add(pMem, pDenH1), w) + + // 1/((y - h2) (y - h2w3) (y - h2w3_2) (y - h3) (y - h3w3) (y - h3w3_2)) + w := addmod(y, mod(sub(q, mload(add(pMem, pH2w3_0))), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH2w3_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH2w3_2))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_0))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_1))), q), q), q) + w := mulmod(w, addmod(y, mod(sub(q, mload(add(pMem, pH3w3_2))), q), q), q) + mstore(add(pMem, pDenH2), w) + + // Denominator needed in the verifier when computing L_i^{S0}(X) + computeLiS0(pMem) + + // Denominator needed in the verifier when computing L_i^{S1}(X) + computeLiS1(pMem) + + // Denominator needed in the verifier when computing L_i^{S2}(X) + computeLiS2(pMem) + + // L_i where i from 1 to num public inputs, needed in step 6 and 7 of the verifier to compute L_1(xi) and PI(xi) + w := 1 + let xi := mload(add(pMem, pXi)) + + mstore(add(pMem, pEval_l1), mulmod(n, mod(add(sub(xi, w), q), q), q)) + + + // Execute Montgomery batched inversions of the previous prepared values + inverseArray(pMem) } + + // Compute Lagrange polynomial evaluation L_i(xi) + function computeLagrange(pMem) { + let zh := mload(add(pMem, pZh)) + let w := 1 + + mstore(add(pMem, pEval_l1 ), mulmod(mload(add(pMem, pEval_l1 )), zh, q)) + + } + + // Compute public input polynomial evaluation PI(xi) + function computePi(pMem, pPub) { + let pi := 0 + pi := mod(add(sub(pi, mulmod(mload(add(pMem, pEval_l1)), calldataload(pPub), q)), q), q) + + mstore(add(pMem, pPi), pi) + } + + // Compute r0(y) by interpolating the polynomial r0(X) using 8 points (x,y) + // where x = {h9, h0w8, h0w8^2, h0w8^3, h0w8^4, h0w8^5, h0w8^6, h0w8^7} + // and y = {C0(h0), C0(h0w8), C0(h0w8^2), C0(h0w8^3), C0(h0w8^4), C0(h0w8^5), C0(h0w8^6), C0(h0w8^7)} + // and computing C0(xi) + function computeR0(pMem) { + let num := 1 + let y := mload(add(pMem, pY)) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + + num := addmod(num, mod(sub(q, mload(add(pMem, pXi))), q), q) + + let res + let h0w80 + let c0Value + let h0w8i + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_0)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 0))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_1)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 32))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_2)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 64))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_3)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 96))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_4)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 128))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_5)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 160))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_6)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 192))), q), q), q) + + + // Compute c0Value = ql + (h0w8i) qr + (h0w8i)^2 qo + (h0w8i)^3 qm + (h0w8i)^4 qc + + // + (h0w8i)^5 S1 + (h0w8i)^6 S2 + (h0w8i)^7 S3 + h0w80 := mload(add(pMem, pH0w8_7)) + c0Value := addmod(calldataload(pEval_ql), mulmod(calldataload(pEval_qr), h0w80, q), q) + h0w8i := mulmod(h0w80, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qo), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qm), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_qc), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s1), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s2), h0w8i, q), q) + h0w8i := mulmod(h0w8i, h0w80, q) + c0Value := addmod(c0Value, mulmod(calldataload(pEval_s3), h0w8i, q), q) + + res := addmod(res, mulmod(c0Value, mulmod(num, mload(add(pMem, add(pLiS0Inv, 224))), q), q), q) + + + mstore(add(pMem, pR0), res) + } + + // Compute r1(y) by interpolating the polynomial r1(X) using 4 points (x,y) + // where x = {h1, h1w4, h1w4^2, h1w4^3} + // and y = {C1(h1), C1(h1w4), C1(h1w4^2), C1(h1w4^3)} + // and computing T0(xi) + function computeR1(pMem) { + let num := 1 + let y := mload(add(pMem, pY)) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + num := mulmod(num, y, q) + + num := addmod(num, mod(sub(q, mload(add(pMem, pXi))), q), q) + + let t0 + let evalA := calldataload(pEval_a) + let evalB := calldataload(pEval_b) + let evalC := calldataload(pEval_c) + + t0 := mulmod(calldataload(pEval_ql), evalA, q) + t0 := addmod(t0, mulmod(calldataload(pEval_qr), evalB, q) ,q) + t0 := addmod(t0, mulmod(calldataload(pEval_qm), mulmod(evalA, evalB, q), q) ,q) + t0 := addmod(t0, mulmod(calldataload(pEval_qo), evalC, q) ,q) + t0 := addmod(t0, calldataload(pEval_qc) ,q) + t0 := addmod(t0, mload(add(pMem, pPi)), q) + t0 := mulmod(t0, mload(add(pMem, pZhInv)), q) + + let res + let c1Value + let h1w4 + let square + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_0)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(0, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_1)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(1, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_2)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(2, 32)))), q), q), q) + + c1Value := evalA + h1w4 := mload(add(pMem, pH1w4_3)) + + c1Value := addmod(c1Value, mulmod(h1w4, evalB, q), q) + square := mulmod(h1w4, h1w4, q) + c1Value := addmod(c1Value, mulmod(square, evalC, q), q) + c1Value := addmod(c1Value, mulmod(mulmod(square, h1w4, q), t0, q), q) + + res := addmod(res, mulmod(c1Value, mulmod(num, mload(add(pMem, add(pLiS1Inv, mul(3, 32)))), q), q), q) + + + mstore(add(pMem, pR1), res) + } + + // Compute r2(y) by interpolating the polynomial r2(X) using 6 points (x,y) + // where x = {[h2, h2w3, h2w3^2], [h3, h3w3, h3w3^2]} + // and y = {[C2(h2), C2(h2w3), C2(h2w3^2)], [C2(h3), C2(h3w3), C2(h3w3^2)]} + // and computing T1(xi) and T2(xi) + function computeR2(pMem) { + let y := mload(add(pMem, pY)) + let num := 1 + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + num := mulmod(y, num, q) + + let num2 := 1 + num2 := mulmod(y, num2, q) + num2 := mulmod(y, num2, q) + num2 := mulmod(y, num2, q) + num2 := mulmod(num2, addmod(mulmod(mload(add(pMem, pXi)), w1 ,q), mload(add(pMem, pXi)), q), q) + + num := addmod(num, mod(sub(q, num2), q), q) + + num2 := mulmod(mulmod(mload(add(pMem, pXi)), w1 ,q), mload(add(pMem, pXi)), q) + + num := addmod(num, num2, q) + + let t1 + let t2 + let betaXi := mulmod(mload(add(pMem, pBeta)), mload(add(pMem, pXi)), q) + let gamma := mload(add(pMem, pGamma)) + + t2 := addmod(calldataload( pEval_a), addmod(betaXi, gamma, q) ,q) + t2 := mulmod(t2, + addmod(calldataload( pEval_b), + addmod(mulmod(betaXi, k1, q), gamma, q) ,q), q) + t2 := mulmod(t2, + addmod(calldataload( pEval_c), + addmod(mulmod(betaXi, k2, q), gamma, q) ,q), q) + t2 := mulmod(t2, calldataload(pEval_z), q) + + //Let's use t1 as a temporal variable to save one local + t1 := addmod(calldataload(pEval_a), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s1), q), gamma, q) ,q) + t1 := mulmod(t1, + addmod(calldataload(pEval_b), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s2), q), gamma, q) ,q), q) + t1 := mulmod(t1, + addmod(calldataload(pEval_c), addmod(mulmod(mload(add(pMem, pBeta)), calldataload(pEval_s3), q), gamma, q) ,q), q) + t1 := mulmod(t1, calldataload(pEval_zw), q) + + t2:= addmod(t2, mod(sub(q, t1), q), q) + t2 := mulmod(t2, mload(add(pMem, pZhInv)), q) + + // Compute T1(xi) + t1 := sub(calldataload(pEval_z), 1) + t1 := mulmod(t1, mload(add(pMem, pEval_l1)) ,q) + t1 := mulmod(t1, mload(add(pMem, pZhInv)) ,q) + + // Let's use local variable gamma to save the result + gamma:=0 + + let hw + let c2Value + + hw := mload(add(pMem, pH2w3_0)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(0, 32)))), q), q), q) + + hw := mload(add(pMem, pH2w3_1)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(1, 32)))), q), q), q) + + hw := mload(add(pMem, pH2w3_2)) + c2Value := addmod(calldataload(pEval_z), mulmod(hw, t1, q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), t2, q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(2, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_0)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(3, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_1)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(4, 32)))), q), q), q) + + hw := mload(add(pMem, pH3w3_2)) + c2Value := addmod(calldataload(pEval_zw), mulmod(hw, calldataload(pEval_t1w), q), q) + c2Value := addmod(c2Value, mulmod(mulmod(hw, hw, q), calldataload(pEval_t2w), q), q) + gamma := addmod(gamma, mulmod(c2Value, mulmod(num, mload(add(pMem, add(pLiS2Inv, mul(5, 32)))), q), q), q) + + mstore(add(pMem, pR2), gamma) + } + + // G1 function to accumulate a G1 value to an address + function g1_acc(pR, pP) { + let mIn := mload(0x40) + mstore(mIn, mload(pR)) + mstore(add(mIn, 32), mload(add(pR, 32))) + mstore(add(mIn, 64), mload(pP)) + mstore(add(mIn, 96), mload(add(pP, 32))) + + let success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + // G1 function to multiply a G1 value to value in an address + function g1_mulAcc(pR, pP, s) { + let success + let mIn := mload(0x40) + mstore(mIn, calldataload(pP)) + mstore(add(mIn, 32), calldataload(add(pP, 32))) + mstore(add(mIn, 64), s) + + success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + + mstore(add(mIn, 64), mload(pR)) + mstore(add(mIn, 96), mload(add(pR, 32))) + + success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + // G1 function to multiply a G1 value(x,y) to value in an address + function g1_mulAccC(pR, x, y, s) { + let success + let mIn := mload(0x40) + mstore(mIn, x) + mstore(add(mIn, 32), y) + mstore(add(mIn, 64), s) + + success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + + mstore(add(mIn, 64), mload(pR)) + mstore(add(mIn, 96), mload(add(pR, 32))) + + success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) + + if iszero(success) { + mstore(0, 0) + return(0, 0x20) + } + } + + function computeFEJ(pMem) { + // Prepare shared numerator between F, E and J to reuse it + let y := mload(add(pMem, pY)) + let numerator := addmod(y, mod(sub(q, mload(add(pMem, pH0w8_0))), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_1))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_2))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_3))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_4))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_5))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_6))), q), q), q) + numerator := mulmod(numerator, addmod(y, mod(sub(q, mload(add(pMem, pH0w8_7))), q), q), q) + + // Prepare shared quotient between F and E to reuse it + let quotient1 := mulmod(mload(add(pMem, pAlpha)), mulmod(numerator, mload(add(pMem, pDenH1)), q), q) + let quotient2 := mulmod(mulmod(mload(add(pMem, pAlpha)), mload(add(pMem, pAlpha)), q), mulmod(numerator, mload(add(pMem, pDenH2)), q), q) + + // Compute full batched polynomial commitment [F]_1 + mstore(add(pMem, pF), C0x) + mstore(add(pMem, add(pF, 32)), C0y) + g1_mulAcc(add(pMem, pF), pC1, quotient1) + g1_mulAcc(add(pMem, pF), pC2, quotient2) + + // Compute group-encoded batch evaluation [E]_1 + g1_mulAccC(add(pMem, pE), G1x, G1y, addmod(mload(add(pMem, pR0)), addmod(mulmod(quotient1, mload(add(pMem, pR1)),q), mulmod(quotient2, mload(add(pMem, pR2)),q), q), q)) + + // Compute the full difference [J]_1 + g1_mulAcc(add(pMem, pJ), pW1, numerator) + } + + // Validate all evaluations with a pairing checking that e([F]_1 - [E]_1 - [J]_1 + y[W2]_1, [1]_2) == e([W']_1, [x]_2) + function checkPairing(pMem) -> isOk { + let mIn := mload(0x40) + + // First pairing value + // Compute -E + mstore(add(add(pMem, pE), 32), mod(sub(qf, mload(add(add(pMem, pE), 32))), qf)) + // Compute -J + mstore(add(add(pMem, pJ), 32), mod(sub(qf, mload(add(add(pMem, pJ), 32))), qf)) + // F = F - E - J + y·W2 + g1_acc(add(pMem, pF), add(pMem, pE)) + g1_acc(add(pMem, pF), add(pMem, pJ)) + g1_mulAcc(add(pMem, pF), pW2, mload(add(pMem, pY))) + + mstore(mIn, mload(add(pMem, pF))) + mstore(add(mIn, 32), mload(add(add(pMem, pF), 32))) + + // Second pairing value + mstore(add(mIn, 64), G2x2) + mstore(add(mIn, 96), G2x1) + mstore(add(mIn, 128), G2y2) + mstore(add(mIn, 160), G2y1) + + // Third pairing value + // Compute -W2 + mstore(add(mIn, 192), calldataload(pW2)) + let s := calldataload(add(pW2, 32)) + s := mod(sub(qf, s), qf) + mstore(add(mIn, 224), s) + + // Fourth pairing value + mstore(add(mIn, 256), X2x2) + mstore(add(mIn, 288), X2x1) + mstore(add(mIn, 320), X2y2) + mstore(add(mIn, 352), X2y1) + + let success := staticcall(sub(gas(), 2000), 8, mIn, 384, mIn, 0x20) + + isOk := and(success, mload(mIn)) + } + + let pMem := mload(0x40) + mstore(0x40, add(pMem, lastMem)) + + // Validate that all evaluations ∈ F + checkInput() + + // Compute the challenges: beta, gamma, xi, alpha and y ∈ F, h1w4/h2w3/h3w3 roots, xiN and zh(xi) + computeChallenges(pMem, pubSignals) + + // To divide prime fields the Extended Euclidean Algorithm for computing modular inverses is needed. + // The Montgomery batch inversion algorithm allow us to compute n inverses reducing to a single one inversion. + // More info: https://vitalik.ca/general/2018/07/21/starks_part_3.html + // To avoid this single inverse computation on-chain, it has been computed in proving time and send it to the verifier. + // Therefore, the verifier: + // 1) Prepare all the denominators to inverse + // 2) Check the inverse sent by the prover it is what it should be + // 3) Compute the others inverses using the Montgomery Batched Algorithm using the inverse sent to avoid the inversion operation it does. + computeInversions(pMem) + + // Compute Lagrange polynomial evaluations Li(xi) + computeLagrange(pMem) + + // Compute public input polynomial evaluation PI(xi) = \sum_i^l -public_input_i·L_i(xi) + computePi(pMem, pubSignals) + + // Computes r1(y) and r2(y) + computeR0(pMem) + computeR1(pMem) + computeR2(pMem) + + // Compute full batched polynomial commitment [F]_1, group-encoded batch evaluation [E]_1 and the full difference [J]_1 + computeFEJ(pMem) + + // Validate all evaluations + let isValid := checkPairing(pMem) + + mstore(0, isValid) + return(0, 0x20) + } + } +} \ No newline at end of file diff --git a/docs/v2/lib/PolygonRollupBaseEtrog.md b/docs/v2/lib/PolygonRollupBaseEtrog.md index c8d40e1e8..a2184b926 100644 --- a/docs/v2/lib/PolygonRollupBaseEtrog.md +++ b/docs/v2/lib/PolygonRollupBaseEtrog.md @@ -236,6 +236,15 @@ Generate Initialize transaction for hte bridge on L2 |`_gasTokenNetwork` | uint32 | Indicates the native network of the token address |`_gasTokenMetadata` | bytes | Abi encoded gas token metadata +### _verifyOrigin +```solidity + function _verifyOrigin( + ) internal returns (bytes gasTokenMetadata) +``` + + + + ## Events ### SequenceBatches ```solidity diff --git a/tools/deployVerifier/.gitignore b/tools/deployVerifier/.gitignore new file mode 100644 index 000000000..f5c01b984 --- /dev/null +++ b/tools/deployVerifier/.gitignore @@ -0,0 +1 @@ +deploy_verifier_parameters.json \ No newline at end of file diff --git a/tools/deployVerifier/README.md b/tools/deployVerifier/README.md new file mode 100644 index 000000000..08deda9b9 --- /dev/null +++ b/tools/deployVerifier/README.md @@ -0,0 +1,36 @@ +# Deploy verifier +Script to deploy `verifier` smart contract + +## Install +``` +npm i +``` + +## Setup +- Config file + - `realVerifier`: select between a real or a mock verifer + - `forkID`: Select fork to verifier to be deployed (if a real verfifier is selected) + - `deployerPvtKey`: private key deployer + - First option will load `deployerPvtKey`. Otherwise, `process.env.MNEMONIC` will be loaded from the `.env` file + - `maxFeePerGas`: set custom gas + - `maxPriorityFeePerGas`: set custom gas + - `multiplierGas`: set custom gas +- A network should be selected when running the script + - examples: `-- sepolia` or `--mainnet` + - This uses variables set in `hardhat.config.ts` + - Which uses some nvironment variables that should be set in `.env` +> All paths are from roor repository + +## Usage +> All commands are done from root repository. + +- Copy configuration file: +``` +cp ./tools/deployVerifier/deploy_verifier_parameters.example ./tools/deployVerifier/deploy_verifier_parameters.json +``` + +- Set your parameters +- Run tool: +``` +npx hardhat run ./tools/addRollupType/deployVerififer.ts --network sepolia +``` diff --git a/tools/deployVerifier/deployVerifier.ts b/tools/deployVerifier/deployVerifier.ts index 9a58d68a0..89a1eecbb 100644 --- a/tools/deployVerifier/deployVerifier.ts +++ b/tools/deployVerifier/deployVerifier.ts @@ -56,27 +56,33 @@ async function main() { [deployer] = await ethers.getSigners(); } - console.log("deploying with: ", deployer.address); + console.log("--> Deploying with: ", deployer.address); /* - *Deployment pol + * Deployment Verifier */ + const verifierName = `FflonkVerifier_${deployParameters.forkID}`; let verifierContract; if (deployParameters.realVerifier === true) { - const VerifierRollup = await ethers.getContractFactory("FflonkVerifier", deployer); + const VerifierRollup = await ethers.getContractFactory(verifierName, deployer); + console.log(`--> Deploying verifier: ${verifierName}`); verifierContract = await VerifierRollup.deploy(); await verifierContract.waitForDeployment(); } else { const VerifierRollupHelperFactory = await ethers.getContractFactory("VerifierRollupHelperMock", deployer); + console.log("Deploying verifier VerifierRollupHelperMock"); verifierContract = await VerifierRollupHelperFactory.deploy(); await verifierContract.waitForDeployment(); } - console.log("#######################\n"); + // print contract address deployed + console.log("\n#######################"); console.log("Verifier deployed to:", verifierContract.target); console.log("#######################\n"); - console.log("verifierContract deployed to:", verifierContract.target); - console.log("you can verify the new verifierContract address with:"); - console.log(`npx hardhat verify ${verifierContract.target} --network ${process.env.HARDHAT_NETWORK}\n`); + // print verification command line + console.log("#######################"); + console.log("you can verify the new verifierContract address with the following command:"); + console.log(`npx hardhat verify ${verifierContract.target} --network ${process.env.HARDHAT_NETWORK}`); + console.log("#######################"); } main().catch((e) => { diff --git a/tools/deployVerifier/deploy_verifier_parameters.example b/tools/deployVerifier/deploy_verifier_parameters.example index 82d313e24..7234d1595 100644 --- a/tools/deployVerifier/deploy_verifier_parameters.example +++ b/tools/deployVerifier/deploy_verifier_parameters.example @@ -1,5 +1,6 @@ { "realVerifier": true, + "forkID": 10, "deployerPvtKey": "", "maxFeePerGas":"", "maxPriorityFeePerGas":"",